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;
}
}