2012-04-05 47 views
2

ich habe:Erweiterte Frühling @Qualifier

@Component 
class MyDecorator{ 
    private Cache cache; 
    /* 
    some wrapped methods like get put remove 
    */ 
} 

Ist es möglich, MyDecorator an verschiedenen Orten mit unterschiedlichen Cache autowire?
kann ich XML wie folgt konfiguriert werden:

<bean id="id1" class="MyDecorator "> 
    <property name="cache" value="Cache1" /> 
</bean> 
<bean id="id2" class="MyDecorator "> 
    <property name="cache" value="Cache2" /> 
</bean> 

Aber gibt es ohne Zusatz von xml configs, nur mehr Eleganz Art und Weise mit Anmerkung?

Korrekter Code sollte

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

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

nach specs werden zwei Bohnen adaptedCache1 und adaptedCache2 erzeugt werden und jetzt kann ich autowire diese Bohnen mit Qualifier adaptedCache1 und adaptedCache2

Antwort

2

Mit Java-Konfiguration (Frühjahr 3.1) Sie können schreiben:

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

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

Von co

@Component 
class MyDecorator{ 
    private final Cache cache; 

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

} 
+0

wie verstehen, falls oben Ich habe MyDecorator Cache zu verlängern hat Ich bin mir nicht sicher, ob es sinnvoll ist – Diyko

+0

@Diyko: urse in diesem Fall MyDecorator nicht @Component braucht ist das nicht, wie * Decorator * Muster funktioniert? Es erweitert/implementiert die gleiche Schnittstelle wie das umschlossene Objekt? Sonst ist es ein * Adapter * ... –

+0

scheint ich habe, was du meinst – Diyko