Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 高级Spring@Qualifier_Java_Spring_Code Injection_Autowired - Fatal编程技术网

Java 高级Spring@Qualifier

Java 高级Spring@Qualifier,java,spring,code-injection,autowired,Java,Spring,Code Injection,Autowired,我有: @Component class MyDecorator{ private Cache cache; /* some wrapped methods like get put remove */ } 是否可以在具有不同缓存的不同位置自动连线MyDecorator 我可以这样配置XML: 但是,如果不添加xml配置,只添加注释,还有更优雅的方法吗 正确的代码应该是 @Configuration public class AppConfig { @Be

我有:

@Component
class MyDecorator{
  private Cache cache;
  /*
  some wrapped methods like get put remove
  */
}
是否可以在具有不同缓存的不同位置自动连线
MyDecorator
我可以这样配置XML:


但是,如果不添加xml配置,只添加注释,还有更优雅的方法吗

正确的代码应该是

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

    @Bean
    public MyAdapter adaptedCache2() {
        return new MyAdapter (cache2);
    }} 
根据将生成两个bean adaptedCache1和adaptedCache2 现在我可以了 通过Java配置(Spring 3.1),使用限定符adaptedCache1和adaptedCache2自动连接这些bean,您可以编写:

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

@Bean
public MyDecorator decoratedCache2() {
    return new MyDecorator(cache2);
}
当然,在这种情况下,
MyDecorator
不需要
@组件

@Component
class MyDecorator{
    private final Cache cache;

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

}

正如我在上面的例子中所理解的,我有MyDecorator必须扩展缓存,我不确定它是否好idea@Diyko:装饰图案不是这样工作的吗?它扩展/实现了与包装对象相同的接口?否则它就是一个适配器…看来我明白你的意思了