2011-08-16 16 views
8

Sto utilizzando il cablaggio annotazioni-based (ad esempio @Configurable(autowire=Autowire.BY_TYPE)) per una data classe, e mi piacerebbe collegare tutti i fagioli di un dato tipo in esso come un elenco: contestoC'è un modo in Primavera per autorizzare tutte le dipendenze di un determinato tipo?

applicazione:

<beans> 
    <bean class="com.my.class.FirstConfigurer"/> 
    <bean class="com.my.class.SecondConfigurer"/> 
</beans> 

classe per autowire in:

@Configurable(autowire=Autowire.BY_TYPE) public class Target { 
    ... 
    public void setConfigurers(List<Configurer> configurers) { ... } 
} 

Tutte le dipendenze implementano un'interfaccia comune denominata Configurer

I C'è un modo per fare in modo che tutte le dipendenze di un tipo siano collegate insieme in una raccolta e iniettate dove necessario, o dovrei definire uno <list> in XML o qualcosa del genere?

risposta

7

Sì,

@Inject 
private List<Configurer> configurers; 

opere, e si ottiene un elenco di tutti i fagioli che implementano l'interfaccia. (più variazioni - @Inject o @Autowired, immissione sul campo, setter o costruttore - tutto lavoro)

+1

Non sono mai riuscito a far funzionare il field autowiring, ma buono a sapersi! –

2

Questo dovrebbe funzionare:

@Configurable(autowire=Autowire.BY_TYPE) 
public class Target { 

    @Autowired 
    public void setConfigurers(List<Configurer> configurers) { ... } 

} 

Questo è descritto in section 3.9.2 of the Spring manual:

È anche possibile prevedere tutti i fagioli di un particolare tipo dal ApplicationContext aggiungendo l'annotazione di un campo o metodo che si aspetta un array di quel tipo [...] Lo stesso vale per le raccolte tipizzate.

+0

Sfortunatamente, questo non funziona per me. Sto eseguendo Spring 3.0.1, ho definito configurabile sulla mia classe di destinazione, definito automaticamente sul mio setter, load-time-weaving configurato correttamente, istanze configurer caricate nel mio contesto applicativo, ma non accade alcun autowiring per questa proprietà, sebbene altri le proprietà sono autowired correttamente. Strano. Vedo che Spring sta creando il configuratore nel mio contesto dell'app, ma quando arriva l'autowiring, non lo include. Ho bisogno di più di uno per farlo funzionare? –

Problemi correlati