타입으로 autowiring할 때는 여러 후보가 있을 수 있기 때문에, 선택 과정을 좀 더 제어할 필요가 있을 수 있다. 이를 해결하는 방법 중 하나는 스프링의 @Primary 어노테이션이다. @Primary는 단일값인 의존성에 autowired되기 위한 여러 후보들 가운데 특정 bean이 선택을 받을 수 있도록 해준다. 만약 여러 후보 중 정확히 하나의 후보만이 존재한다면 그것이 autowired 값이 된다.
다음 설정에서 MovieCatalog의 최우선자로 정의된 firstMovieCatalog를 보자.
@Configuration
public class MovieConfiguration {
@Bean
@Primary
public MovieCatalog firstMovieCatalog() { ... }
@Bean
public MovieCatalog secondMovieCatalog() { ... }
// ...
}
위 설정에 따라, 다음 MovieRecommender는 firstMovieCatalog와 autowired된다.
public class MovieRecommender {
@Autowired
private MovieCatalog movieCatalog;
// ...
}
해당 bean의 정의들은 다음과 같다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config />
<bean class="example.SimpleMovieCatalog" primary="true">
<!-- 이 bean이 필요로 하는 의존성들이 주입시킨다 -->
</bean>
<bean class="example.SimpleMovieCatalog">
<!-- 이 bean이 필요로 하는 의존성들이 주입시킨다 -->
</bean>
<bean id="movieRecommender" class="example.MovieRecommender" />
</beans>
'SpringFramework Core - I. IoC 컨테이너 > 9. 어노테이션 기반의 컨테이너 설정' 카테고리의 다른 글
9.5. Autowiring 수식자들로써 지네릭 사용하기 (0) | 2020.04.13 |
---|---|
9.4. Qualifier들을 활용한 어노테이션 기반의 정교한 Autowiring (1) | 2020.04.10 |
9.2. @Autowired 사용하기 (0) | 2020.04.09 |
9.1 @Required (0) | 2020.04.09 |
9. 어노테이션 기반의 컨테이너 설정 (0) | 2020.04.08 |