高级Spring @Qualifier

时间:2012-04-05 12:06:55

标签: java spring code-injection autowired

我有:

@Component
class MyDecorator{
  private Cache cache;
  /*
  some wrapped methods like get put remove
  */
}

是否可以在具有不同缓存的不同位置自动装配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将生成两个beansCedatedCache1和adaptedCache2 现在我可以 使用限定符adaptCache1和adaptedCache2

自动装配那些bean

1 个答案:

答案 0 :(得分:2)

使用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;
    }

}