2011-08-16 14 views
8

estoy usando cableado basada en anotaciones (es decir @Configurable(autowire=Autowire.BY_TYPE)) para una clase dada, y me gustaría conectar todos los granos de un tipo dado en ella como una lista: contexto¿Hay alguna manera en Spring para autocablear todas las dependencias de un tipo determinado?

aplicación:

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

clase para Autowire en:

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

Todas las dependencias implementan una interfaz común que se llama Configurer

I ¿Hay alguna manera de hacer que esto funcione para tener todas las dependencias de un tipo conectadas en una colección e inyectadas cuando sea necesario, o debería definir un <list> en XML o algo así?

Respuesta

7

Sí,

@Inject 
private List<Configurer> configurers; 

obras, y se obtiene una lista de todos los granos que implementan la interfaz. (Varias variaciones - @Inject o @Autowired, inyección de campo, setter o constructor - todo funciona)

+1

Nunca he podido trabajar en el campo, ¡pero es bueno saberlo! –

2

Esto debería funcionar:

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

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

} 

Esto se describe en section 3.9.2 of the Spring manual:

También es posible proporcionar todos los granos de un tipo particular de la ApplicationContext mediante la adición de la anotación a un campo o método que espera una matriz de ese tipo [...] Lo mismo se aplica a las colecciones tipadas.

+0

Lamentablemente, esto no funciona para mí. Estoy ejecutando Spring 3.0.1, he definido configurable en mi clase de destino, autovinculado definido en mi setter, load-time-weaving configurado correctamente, instancias de configuración cargadas en el contexto de mi aplicación, pero no se realiza el autoenvío para esta propiedad, aunque otras las propiedades están auto conectadas correctamente Extraño. Veo que Spring está creando el configurador en mi contexto de aplicación, pero cuando llega el autoenlace, no lo incluye. ¿Necesito más de uno para que funcione? –

Cuestiones relacionadas