Loading...
Spring Framework Reference Documentation 7.0.2의 Fine-tuning Annotation-based Autowiring with @Primary or @Fallback의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
@Primary or @Fallback타입에 의한 autowiring은 여러 candidate로 이어질 수 있기 때문에, 선택 과정에 대해
더 많은 제어가 필요한 경우가 자주 있습니다. 이를 달성하는 한 가지 방법은 Spring의
@Primary 어노테이션을 사용하는 것입니다. @Primary는 특정 bean이 단일 값
의존성에 autowire될 candidate가 여러 개일 때 선호되어야 함을 나타냅니다.
candidate 중 정확히 하나의 primary bean이 존재하는 경우, 그것이 autowired 값이 됩니다.
다음 설정은 firstMovieCatalog를 primary MovieCatalog로 정의하는
예시입니다:
1@Configuration 2public class MovieConfiguration { 3 4 @Bean 5 @Primary 6 public MovieCatalog firstMovieCatalog() { ... } 7 8 @Bean 9 public MovieCatalog secondMovieCatalog() { ... } 10 11 // ... 12}
1@Configuration 2class MovieConfiguration { 3 4 @Bean 5 @Primary 6 fun firstMovieCatalog(): MovieCatalog { ... } 7 8 @Bean 9 fun secondMovieCatalog(): MovieCatalog { ... } 10 11 // ... 12}
또는, 6.2부터는 일반적인 bean 이외에 주입될 bean을 구분하기 위한 @Fallback
어노테이션이 있습니다. 하나의 regular bean만 남게 되면, 그것 역시 사실상 primary가
됩니다:
1@Configuration 2public class MovieConfiguration { 3 4 @Bean 5 public MovieCatalog firstMovieCatalog() { ... } 6 7 @Bean 8 @Fallback 9 public MovieCatalog secondMovieCatalog() { ... } 10 11 // ... 12}
1@Configuration 2class MovieConfiguration { 3 4 @Bean 5 fun firstMovieCatalog(): MovieCatalog { ... } 6 7 @Bean 8 @Fallback 9 fun secondMovieCatalog(): MovieCatalog { ... } 10 11 // ... 12}
앞선 설정의 두 가지 변형 모두에서, 다음 MovieRecommender는
firstMovieCatalog로 autowired됩니다:
1public class MovieRecommender { 2 3 @Autowired 4 private MovieCatalog movieCatalog; 5 6 // ... 7}
1class MovieRecommender { 2 3 @Autowired 4 private lateinit var movieCatalog: MovieCatalog 5 6 // ... 7}
해당 bean 정의는 다음과 같습니다:
1<?xml version="1.0" encoding="UTF-8"?> 2<beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 https://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/context 8 https://www.springframework.org/schema/context/spring-context.xsd"> 9 10 <context:annotation-config/> 11 12 <bean class="example.SimpleMovieCatalog" primary="true"> 13 <!-- inject any dependencies required by this bean --> 14 </bean> 15 16 <bean class="example.SimpleMovieCatalog"> 17 <!-- inject any dependencies required by this bean --> 18 </bean> 19 20 <bean id="movieRecommender" class="example.MovieRecommender"/> 21 22</beans>
Using @Autowired
Fine-tuning Annotation-based Autowiring with Qualifiers