ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • @Qualifier
    Java&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;
        }
Designed by Tistory.