2012-04-05 8 views
2

は私が持っている:高度な春@Qualifier

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

それは異なるキャッシュと異なる場所でMyDecoratorをautowireすることは可能ですか?
私はこのようなXMLを設定することができます。

<bean id="id1" class="MyDecorator "> 
    <property name="cache" value="Cache1" /> 
</bean> 
<bean id="id2" class="MyDecorator "> 
    <property name="cache" value="Cache2" /> 
</bean> 

しかし、唯一のアノテーションで、そこのXMLコンフィグを添加することなく、より優雅な方法ですか?

正しいコードは、2つのBean adaptedCache1とadaptedCache2 を生成するspecsに従って

@Configuration 
    public class AppConfig { 
@Bean 
    public MyAdapter adaptedCache2() { 
     return new MyAdapter (cache1); 
    } 

    @Bean 
    public MyAdapter adaptedCache2() { 
     return new MyAdapter (cache2); 
    }} 

であるべきであり、今は、Java構成で修飾子adaptedCache1とadaptedCache2

答えて

2

(スプリング3.1を有するもの豆をautowire でき)あなたは書くことができます:

@Bean 
public MyDecorator decoratedCache1() { 
    return new MyDecorator(cache1); 
} 

@Bean 
public MyDecorator decoratedCache2() { 
    return new MyDecorator(cache2); 
} 

of coこの場合MyDecoratorでURSEは@Componentを必要としません:

@Component 
class MyDecorator{ 
    private final Cache cache; 

    public MyDecorator(Cache cache) { 
     this.cache = cache; 
    } 

} 
+0

私はMyDecoratorが、私はそれは良いアイデア – Diyko

+0

@Diykoであるかどうかわからないんだけどキャッシュを拡張するために持っている必要があり、この場合の理解と:これはどのように*デコ*ではありませんパターンは機能しますか?ラップされたオブジェクトと同じインタフェースを拡張/実装しますか?それ以外の場合は、*アダプタ* ... –

+0

私はあなたが意味するものを持っていると思われる – Diyko