java - 高级 Spring @Qualifier

标签 java spring code-injection autowired

我有:

@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/

相关文章:

java - 使用我创建的 Exception 类捕获抛出的异常

java - 使用Spring Security重新登录时没有消息可用错误

java - Spring数据规范中的可为空参数

c# - 故意编写易受命令注入(inject)攻击的页面

r - 阻止潜在的恶意R调用

java - 使用 Spring JDBC 插入 postgis MultiPolygon 数据类型时出错

java - Android 多播只能使用 255.255.255.255 地址

java - 如何判断NetworkInterface对象是否属于物理网卡

java - 如何创建容错JobStep

Java EE 使用没有查找方法的数据源