2012-04-05 51 views
2

我:高級春天@Qualifier

@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的configs的,只能用註解?

正確的代碼應該是

@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

回答

2

隨着Java配置(春季3.1那些豆)你可以這樣寫:

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

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

Of co URSE在這種情況下MyDecorator不需要@Component

@Component 
class MyDecorator{ 
    private final Cache cache; 

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

} 
+0

作爲案例瞭解我在上文中MyDecorator必須擴展緩存,我不知道這是否是好主意 – Diyko 2012-04-05 12:20:15

+0

@Diyko:這不就是如何*裝飾*模式的作品?它擴展/實現與包裝對象相同的接口?否則,它是一個*適配器* ... – 2012-04-05 12:22:33

+0

看來我已經得到了你的意思 – Diyko 2012-04-05 12:32:44