Fine-tuning Annotation-based Autowiring with @Primary

Dev.Hammy·2024년 2월 11일
0

type별 autowiring은 여러 후보로 이어질 수 있으므로 선택 프로세스를 더 많이 제어해야 하는 경우가 많습니다. 이를 달성하는 한 가지 방법은 Spring의 @Primary 어노테이션을 사용하는 것입니다. @Primary는 여러 Bean이 단일 값 종속성에 자동 연결될 후보인 경우 특정 Bean에 우선순위를 부여해야 함을 나타냅니다. 후보 중에 정확히 하나의 기본 Bean이 존재하는 경우 이는 자동 연결 값이 됩니다.

firstMovieCatalog를 기본 MovieCatalog로 정의하는 다음 구성을 고려하세요.

@Configuration
public class MovieConfiguration {

	@Bean
	@Primary
	public MovieCatalog firstMovieCatalog() { ... }

	@Bean
	public MovieCatalog secondMovieCatalog() { ... }

	// ...
}

이전 구성을 사용하면 다음 MovieRecommenderfirstMovieCatalog와 함께 자동 연결됩니다.

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">
		<!-- inject any dependencies required by this bean -->
	</bean>

	<bean class="example.SimpleMovieCatalog">
		<!-- inject any dependencies required by this bean -->
	</bean>

	<bean id="movieRecommender" class="example.MovieRecommender"/>

</beans>

0개의 댓글