leelee.log
[Spring] @Primary, @qualifier 본문
@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가 좀 더 안전한 방법이라고 한다.
쓸 일이 많지는 않을 것 같은데 저런 개념도 있다는 걸 알면 도움이 될 것 같아서 따로 기록을 해둔다.
'개발 > Backend' 카테고리의 다른 글
[Spring] profile 과 properties (0) | 2020.04.05 |
---|---|
[Spring] Bean Scope (0) | 2020.03.31 |
[Spring] @SpringBootApplication과 @ComponentScan (0) | 2020.03.17 |
[Spring] applicationContext를 이용하여 존재하는 bean 가져오기 + Runner.java (0) | 2020.03.17 |
[Spring] Bean LifeCycle (0) | 2020.03.13 |