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 )