Advanced Spring @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, только с аннотацией?

Правильный код должен быть

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

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

в соответствии со спецификациями будут сгенерированы два bean-компонента adapteredCache1 и adapCache2, и теперь я могу автоматически подключать эти bean-компоненты с помощью квалификаторов adapCache1 и adaptaCache2

1 ответ

Решение

С настройкой 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;
    }

}
Другие вопросы по тегам