我有:
@Component
class MyDecorator{
private Cache cache;
/*
some wrapped methods like get put remove
*/
}
是否可以在具有不同缓存的不同位置 Autowiring MyDecorator
?
我可以这样配置 XML:
<bean id="id1" class="MyDecorator ">
<property name="cache" value="Cache1" />
</bean>
<bean id="id2" class="MyDecorator ">
<property name="cache" value="Cache2" />
</bean>
但是有没有更优雅的方式,无需添加 xml 配置,仅使用注释?
正确的代码应该是
@Configuration
public class AppConfig {
@Bean
public MyAdapter adaptedCache2() {
return new MyAdapter (cache1);
}
@Bean
public MyAdapter adaptedCache2() {
return new MyAdapter (cache2);
}}
根据specs会生成两个bean AdaptedCache1和adaptedCache2 现在我可以 使用限定符adaptedCache1和adaptedCache2 Autowiring 这些bean
最佳答案
使用 Java 配置(Spring 3.1),您可以编写:
@Bean
public MyDecorator decoratedCache1() {
return new MyDecorator(cache1);
}
@Bean
public MyDecorator decoratedCache2() {
return new MyDecorator(cache2);
}
当然在这种情况下MyDecorator
不需要@Component
:
@Component
class MyDecorator{
private final Cache cache;
public MyDecorator(Cache cache) {
this.cache = cache;
}
}
关于java - 高级 Spring @Qualifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10028272/