Я немного озадачен тем, как Spring создает экземпляры и предоставляет сервисы.
По сути, я ищу решение следующей проблемы, которая блокирует запуск моего приложения.
Field titleService1 in com.scorpio.spring.security.oauth2.controller.TitleController required a single bean, but 2 were found:
- genderServiceImpl: defined in file [\spring\authorities\target\classes\com\spring\security\service\GenderServiceImpl.class]
- titleServiceImpl: defined in file [\spring\authorities\target\classes\com\spring\security\service\TitleServiceImpl.class]
У меня есть два контроллера Rest, а именно TitleController
и CompanyController
скаждый контроллер ссылается на один или несколько сервисов.Службы являются реализацией BaseService<T>
TitleController.java
@RestController
@RequestMapping("/secured/title")
public class TitleController {
@Autowired
private BaseService<Title> titleService;
}
CompanyController.java
@RestController
@RequestMapping("/secured/company")
public class CompanyController {
@Autowired
private BaseService<Title> titleService;
@Autowired
private BaseService<Gender> genderService;
}
BaseService.java
public interface BaseService<T> {
T get(Integer id);
T get(String t);
List<T> getAll();
void create(T t);
T update(T t);
void delete(Integer id);
void delete(T t);
}
Глядя на ошибку required a single bean, but 2 were found
, и, поскольку существуют две разные реализации BaseService
, я понимаю, что Spring не может решить, какой Bean следуетAutowire
, поскольку ни одна из реализаций не помечена @Qualifer
, @Primary
и т. Д.
Но что более запутанно, так это то, что, когда я закомментирую titleService
из TitleController
и перезапущу мойприложение, это просто работает.Мой вопрос заключается в том, как Spring может Autowire соответствующих служб в CompanyController
и почему, если я пытаюсь Autowire в TitleController
, он не работает?
Большое спасибо.