我有一个带@Service注释的类,它提供了我可以在所有项目中使用的核心功能:
@Service
public class MyService {}另一个是扩展它来实现特定于项目的东西:
@Service
public class ExtendedMyService extends MyService {}现在,我想配置一个bean别名,以便在使用属性自动装配它时能够使用@Qualifier("MyServiceAlias"):
# MyService qualifier (default: myService)
myService.qualifier=extendedMyService在XML中,它将如下所示:
<alias name="${myService.qualifier}" alias="MyServiceAlias" />还讨论了here,但我只需要使用XML,JavaConfig就可以了。这是可能的吗?如何实现?
发布于 2019-01-30 20:16:20
只需少量配置和一个ImportBeanDefinitionRegistrar,您就可以通过Java configuration配置bean别名。您可以查看bean-alias库项目作为参考-为我的项目的需要而开发。随时修改和/或将源代码复制到您自己的项目中,以防其中使用的spring版本不适用于您的设置。
将库放在路径中后,通过注释声明一个别名:
@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);
}
}https://stackoverflow.com/questions/27107133
复制相似问题