2012-04-05 37 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