-
@QualifierJava&Spring/Spring 2022. 10. 31. 13:34
이글은 유데미 강의 Sprin & Hibernate for Beginners 539 번 강의의 내용입니다.
@Repository @RequiredArgsConstructor public class EmployeeDAOJpaImpl implements EmployeeDAO{ @Autowired private final EntityManager em;
@Repository @RequiredArgsConstructor public class EmployeeDAOHibernateImpl implements EmployeeDAO{ @Autowired private final EntityManager em;
Service 에서 받을 implement 가 현제 두개(JPA DAO,Hibernate DAO)라 스프링에서 어떤것을 사용할지 모르겠다 라는 이야기 이다.
Intellij 의 에러 메시지 이다.
Description:
Parameter 0 of constructor in udemycode.service.EmployeeServiceImpl required a single bean, but 2 were found:
- employeeDAOHibernateImpl: defined in file [/Users/chosunghyun/Desktop/javaStudy/SimpleJPA/udemy/udemyCode2/build/classes/java/main/udemycode/dao/EmployeeDAOHibernateImpl.class]
- employeeDAOJpaimpl: defined in file [/Users/chosunghyun/Desktop/javaStudy/SimpleJPA/udemy/udemyCode2/build/classes/java/main/udemycode/dao/EmployeeDAOJpaimpl.class]
Action:
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed하나의 인터페이스를 두개의 서로 다른 레퍼지토리에서 구현을 하여 스프링에 등록을 하고,
서비스단에서 인터페이스를 호출 하였을때 구현체를 찾지 못하는 오류인것 같다 .
다음 코드에서, DAO 생성자 부분에 사용할 BeanId 를 명시 해준다.
수정 전 .
@Service public class EmployeeServiceImpl implements EmployeeService{ private EmployeeDAO employeeDAO; @Autowired public EmployeeServiceImpl(EmployeeDAO theEmployeeDAO) { employeeDAO = theEmployeeDAO; }
@Qualifier 를 사용하는데 사용할 클라스의 첫글자는 lowerCase 로 작성한다.
@Service public class EmployeeServiceImpl implements EmployeeService{ private EmployeeDAO employeeDAO; @Autowired public EmployeeServiceImpl( @Qualifier ("employeeDAOJpaImpl")EmployeeDAO theEmployeeDAO) { employeeDAO = theEmployeeDAO; }
'Java&Spring > Spring' 카테고리의 다른 글
스프링부트 GCS 연동 part1 (0) 2023.01.25 Spring data-JPA,data-Rest (feat.프로젝트 구조) (0) 2022.10.31 Spring data Jpa camelCase 자동 underscore 방지 Mysql (0) 2022.09.19 Spring Test 기초[1] , assertall() (0) 2022.09.06 JPA 영속성 컨텍스트 (0) 2022.09.01