2

我有:

@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);
    }} 

根据规范,将生成两个 beans 适配缓存 1 和适配缓存 2,现在我可以使用限定符适配缓存 1 和适配缓存 2 自动装配这些 bean

4

1 回答 1

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

}
于 2012-04-05T12:12:10.253 回答