leelee.log

[Spring] @Primary, @qualifier 본문

개발/Backend

[Spring] @Primary, @qualifier

leeleelee3264 2020. 3. 18. 21:24

spring framework

 

 @Configuration에 @Bean으로 빈을 등록했는데 동일한 return 타입을 가지고 있거나, @Autowired를 해야되는 상황에 복수의 class에 implements 되어있는 interface를 사용했을 경우 Spring에서는 여러가지 선택지 중에서 어떤걸 bean으로 만들어야 하는지 몰라서 오류를 만들어낸다. 이런 상황이 많지는 않겠지만 @Primary와 @qualifier를 통해서 해결을 할 수 있다. 그런데 명심해야할 점은 어지간하면 bean을 중복으로 만들지 않는게 제일 좋은 해결책이라는 사실이다.

 

 

문제가 발생할 수 있는 상황 1

 

@Configuration 파일에 return value가 똑같은 Bean이 선언되어있다. Spring의 입장에서는 만들면 다 똑같은 Bean이라서 이러면 구분을 할 수 없다. @Primary를 사용하여 해결해준다. @qulifier로는 해결이 불가능하다. 만들어질 bean의 이름을 명시적으로 써줘야하는데 firstBean과 secondBean 메소드를 통해 만들어지는 bean 이름들은 다 똑같은 highClass이기 때문이다.

 

 

문제가 발생할 수 있는 상황 2

 

BookRepository를 구현한 class가 두 개라서 어떤 class가 빈으로 만들어져야 하는지 spring은 모른다. 이때 bean으로 만들고 싶은 클래스의 맨 위에 @Primary를 쓰거나 @Autowired를 하는 상황에서 @qulifier를 사용해서 명시를 해주면 문제가 해결된다. @Primary가 좀 더 안전한 방법이라고 한다.

 


쓸 일이 많지는 않을 것 같은데 저런 개념도 있다는 걸 알면 도움이 될 것 같아서 따로 기록을 해둔다.