JavaConfig中的Spring Bean别名
我有一个@Service
注释类,它提供了我可以在我的所有项目中使用的核心function:
@Service public class MyService {}
和另一个扩展它以实现项目特定的东西:
@Service public class ExtendedMyService extends MyService {}
现在我想配置一个bean别名,以便在使用属性自动assembly它时能够使用@Qualifier("MyServiceAlias")
:
# MyService qualifier (default: myService) myService.qualifier=extendedMyService
在XML中它看起来像:
这里也讨论了它,但我只需要使用XML,JavaConfig。 是否可能以及如何实现?
有一个开放的Jira: https : //jira.spring.io/browse/SPR-6736
解决方法是在@Configuration
类中使用@Bean
:
@Configuration public class AppConfig { @Bean(name = { "dataSource", "subsystemA-dataSource", "subsystemB-dataSource" }) public MyService myService() {} }
如果要使用占位符,另一种解决方法是使用@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); } }
注意:必须特别考虑必须在开头加载的占位符bean(cf javadoc )