весенний полевой сервис требовал боба типа - PullRequest
0 голосов
/ 14 сентября 2018

Я работаю над проектом Spring over Hibernate, я только в начале.Я пытаюсь иметь SpringBootApplication, который записывает в MySql некоторые объекты Location.Но каждый раз, когда я сталкиваюсь с какой-то ошибкой.Я сделал все с моей стороны, ссылаюсь, что все еще не могу решить это.Пожалуйста, помогите мне. Это моя ошибка


APPLICATION FAILED TO START
***************************

Description:

Field service in com.project.abhishek.location.controller.LocationController 
required a bean of type'com.project.abhishek.location.service.LocationService' that could not be 
found.


Action:

Consider defining a bean of type'com.project.abhishek.location.service.LocationService' in your configuration.

Класс приложения

@SpringBootApplication
@ComponentScan(basePackages= {"com.project.abhishek.location.controller"})
@EntityScan(value ="com.project.abhishek.location.entity")
@EnableJpaRepositories(basePackages = {"com.project.abhishek.location.repos"})

public class StudentApplication {

public static void main(String[] args) {
    SpringApplication.run(StudentApplication.class, args);
}}

Контроллер

@Controller
public class LocationController {

@Autowired
private LocationService service;

@RequestMapping("/saveLoc")
public String saveLocation(@ModelAttribute("location") Location location, ModelMap modelMap) {
    Location locationSaved = getService().saveLocation(location);

    String msg = "Location save with id:" +locationSaved.getId();
    modelMap.addAttribute("msg", msg);
    return "createLocation";
}

public LocationService getService() {
    return service;
}

public void setService(LocationService service) {
    this.service = service;
}

Класс обслуживания

@Service
public class LocationServiceImpl implements LocationService {

@Autowired
private LocationRepos locationRepos;

@Override
public Location saveLocation(Location location) {

    return locationRepos.save(location);
}

@Override
public Location updateLocation(Location location) {
    return locationRepos.save(location);
}

@Override
public void deleteLocation(Location location) {
    locationRepos.delete(location);
}

@Override
public Location getLocation(int id) {
    Optional<Location> optional = locationRepos.findById(id);
    Location location = optional.get();
    return location;
}

@Override
public List<Location> getAllLocation() {
    return locationRepos.findAll();
}

public LocationRepos getLocationRepos() {
    return locationRepos;
}

public void setLocationRepos(LocationRepos locationRepos) {
    this.locationRepos = locationRepos;
}

} ​​

Сущность

@Entity
public class Location {

@Id
private int id;
private String code;
private String name;
private String type;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

@Override
public String toString() {
    return "Location [id=" + id + ", code=" + code + ", name=" + name + ", type=" + type + "]";
}

Мои пакетыструктура

com.project.abhishek.location---application classs  
com.project.abhishek.location.controller---controller class  
com.project.abhishek.location.entity---entity class  
com.project.abhishek.location.repos---repository class  
com.project.abhishek.location.service---service class 

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Ничего не требуется при весенней загрузке, она уже есть, @SpringBootApplication достаточно.

просто внесите изменения ниже, и вам будет хорошо ...

Класс основного применения:

@SpringBootApplication
public class StudentApplication {

public static void main(String[] args) {
    SpringApplication.run(StudentApplication.class, args);
}}

Класс контроллера: @Autowired достаточно для загрузки зависимости, ее не нужно устанавливать, просто посмотрите изменения, которые необходимо внести в нотацию @Service, где необходимо указать имя интерфейса, чтобы имя зависимости могло быть locationService, когда вы автоматически подключены.

@RestController
public class LocationController {

@Autowired
private LocationService service;

@RequestMapping("/saveLoc")
public String saveLocation(@ModelAttribute("location") Location location, ModelMap modelMap) {
    Location locationSaved = getService().saveLocation(location);

    String msg = "Location save with id:" +locationSaved.getId();
    modelMap.addAttribute("msg", msg);
    return "createLocation";
}

Изменение класса обслуживания:

@Service("locationService)
public class LocationServiceImpl implements LocationService {
0 голосов
/ 14 сентября 2018

Просто включите com.project.abhishek.location.service в свой @ComponentScan или просто удалите @ComponentScan (таким образом он будет сканировать пакет приложения весенней загрузки com.project.abhishek.location и все пакеты ниже него).

Путем определения @ComponentScan(basePackages= {"com.project.abhishek.location.controller"})вы переопределили путь сканирования компонента по умолчанию com.project.abhishek.location и сказали пружине сканировать только com.project.abhishek.location.controller и пакеты под ним, чтобы он не сканировал com.project.abhishek.location.service.

Проверьте это https://dzone.com/articles/spring-spring-boot-and-component-scan для получения более подробной информациипо определению @ComponentScan.Это похоже на вашу ситуацию:

Однако, допустим, один из компонентов определен в пакете com.in28minutes.springboot.somethingelse

В этом случае вам необходимо добавитьновый пакет в компонентное сканирование.

У вас есть две опции:

Define @ComponentScan («com.in28minutes.springboot»). При этом будет сканироваться все родительское дерево com.in28minutes.springboot.

Или определите два конкретных компонента сканирования, используя массив.@ComponentScan ({«com.in28minutes.springboot.basics.springbootin10steps», «com.in28minutes.springboot.somethingelse»})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...