[SPRING] JavaConfig의 Spring Bean 별칭
SPRINGJavaConfig의 Spring Bean 별칭
모든 프로젝트에서 사용할 수있는 핵심 기능을 제공하는 @Service 주석 클래스가 있습니다.
@Service
public class MyService {}
프로젝트 특정 항목을 구현하기 위해 그것을 확장하는 다른 하나 :
@Service
public class ExtendedMyService extends MyService {}
이제 속성을 사용하여 autowiring 할 때 @Qualifier ( "MyServiceAlias")를 사용할 수 있도록 bean 별칭을 구성하려고합니다.
# MyService qualifier (default: myService)
myService.qualifier=extendedMyService
XML에서는 다음과 같이 보입니다.
<alias name="${myService.qualifier}" alias="MyServiceAlias" />
여기에서도 설명하지만 XML, JavaConfig 만 사용하면됩니다. 가능하고 깨달을 수 있습니까?
해결법
-
==============================
1.Jira가 열려 있습니다 : https://jira.spring.io/browse/SPR-6736
Jira가 열려 있습니다 : https://jira.spring.io/browse/SPR-6736
해결 방법은 @Configuration 클래스에서 @Bean을 사용하는 것입니다.
@Configuration public class AppConfig { @Bean(name = { "dataSource", "subsystemA-dataSource", "subsystemB-dataSource" }) public MyService myService() {} }
-
==============================
2.자리 표시자를 사용하려면 @Value와 Spring applicationContext를 사용하여 @Configuration 클래스에서 @Bean을 사용하는 다른 해결 방법이 있습니다.
자리 표시자를 사용하려면 @Value와 Spring applicationContext를 사용하여 @Configuration 클래스에서 @Bean을 사용하는 다른 해결 방법이 있습니다.
@Configuration public class AppConfig { @Autowired private ApplicationContext context; @Bean public MyService myService(@Value("${myService.qualifier}") String qualifier) { return (MyService) context.getBean(qualifier); } }
주의 : 처음에로드되어야하는 플레이스 홀더 빈에 대해서는 특별한 고려가 필요하다 (cf javadoc)
-
==============================
3.소량의 구성 및 하나의 ImportBeanDefinitionRegistrar를 사용하여 Java 구성을 통해 Bean 별명을 구성 할 수 있습니다. Bean-Alias 라이브러리 프로젝트를 참조하여 프로젝트의 필요에 맞게 확인할 수 있습니다. 사용 된 스프링 버전이 설치 프로그램에서 작동하지 않는 경우에 대비하여 소스를 자신의 프로젝트로 수정하거나 복사하십시오.
소량의 구성 및 하나의 ImportBeanDefinitionRegistrar를 사용하여 Java 구성을 통해 Bean 별명을 구성 할 수 있습니다. Bean-Alias 라이브러리 프로젝트를 참조하여 프로젝트의 필요에 맞게 확인할 수 있습니다. 사용 된 스프링 버전이 설치 프로그램에서 작동하지 않는 경우에 대비하여 소스를 자신의 프로젝트로 수정하거나 복사하십시오.
경로에 라이브러리가 있으면 주석을 통해 별칭을 선언합니다.
@Configuration @BeanAlias(name = "fromName", alias = "toName") public class ExampleConfiguration { }
그게 전부 야.
그것이 작동하는 방법은 주석을 사용하여 ImportBeanDefinitionRegistrar 구현을 가져 오는 것입니다.
@Import(BeanAliasBeanRegistrar.class) public @interface BeanAlias { }
BeanDefinitionRegistry에 별명을 등록합니다.
class BeanAliasBeanRegistrar implements ImportBeanDefinitionRegistrar, PriorityOrdered { @Override public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) { ... registerAlias(registry, metadata.getAnnotationAttributes(BeanAlias.class.getName())); } private void registerAlias(BeanDefinitionRegistry registry, Map<String, Object> attributes) { ... registry.registerAlias(name, alias); } }
from https://stackoverflow.com/questions/27107133/spring-bean-alias-in-javaconfig by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] DataSource가 DataSourceBuilder를 사용할 때 지원되지 않음 (0) | 2019.05.08 |
---|---|
[SPRING] 오류 페이지에서 null 인증을 반환하는 Spring SecurityContext (0) | 2019.05.08 |
[SPRING] Spring Boot 405 POST 메소드가 지원되지 않습니까? (0) | 2019.05.08 |
[SPRING] Spring MVC에서 403 Forbidden을 반환하려면 어떻게해야합니까? (0) | 2019.05.08 |
[SPRING] bean으로부터 Spring shutdown을 강제하는 가장 좋은 방법은? (0) | 2019.05.08 |