¿Cómo definir un List bean en Spring?

Estoy usando Spring para definir etapas en mi aplicación. Está configurado que la clase necesaria (aquí llamada Configurator ) se inyecta con las etapas.
Ahora necesito la Lista de etapas en otra clase, llamada LoginBean . El Configurator no ofrece acceso a su Lista de etapas.

No puedo cambiar el Configurator clase.

Mi idea:
Defina un nuevo bean llamado Stages e LoginBean a Configurator y LoginBean . Mi problema con esta idea es que no sé cómo transformar esta propiedad:

   ... ... ...   

en un frijol

Algo como esto no funciona:

  

¿Puede alguien ayudarme con esto?

Importe el espacio de nombres de la spring de la empresa. Luego puede definir un bean de lista de la siguiente manera:

 < ?xml version="1.0" encoding="UTF-8"?>   foo bar  

El tipo de valor es el tipo de genérico que se utilizará, y es opcional. También puede especificar la clase de implementación de lista utilizando el atributo list-class .

Aquí hay un método:

           

Otra opción es usar JavaConfig. Suponiendo que todas las etapas ya están registradas como frijoles spring, solo tiene que:

 @Autowired private List stages; 

y la spring los inyectará automáticamente en esta lista. Si necesita conservar el orden (la solución superior no lo hace) puede hacerlo de esa manera:

 @Configuration public class MyConfiguration { @Autowired private Stage1 stage1; @Autowired private Stage2 stage2; @Bean public List stages() { return Lists.newArrayList(stage1, stage2); } } 

La otra solución para conservar el orden es usar una anotación @Order en beans. Entonces la lista contendrá los beans ordenados por el valor de la anotación ascendente.

 @Bean @Order(1) public Stage stage1() { return new Stage1(); } @Bean @Order(2) public Stage stage2() { return new Stage2(); } 
          

Y en SomeClass:

 class SomeClass { private List myList; @Required public void setMyList(List myList) { this.myList = myList; } } 

Stacker planteó una gran respuesta, iría un paso más allá para hacerlo más dynamic y utilizar Spring 3 EL Expression.

   #{springDAOBean.getGenericListFoo()}   

Estaba intentando descubrir cómo podía hacer esto con la lista de utilidades, pero no pude hacerlo funcionar debido a errores de conversión.

Creo que puede estar buscando org.springframework.beans.factory.config.ListFactoryBean .

Usted declara una instancia de ListFactoryBean, proporcionando la lista para ser instanciada como una propiedad con un elemento como su valor, y le da al bean un atributo id . Luego, cada vez que utiliza el id declarado como ref o similar en alguna otra statement de beans, se crea una instancia de una nueva copia de la lista. También puede especificar la clase List que se utilizará.

Use el espacio de nombres de la utilidad, podrá registrar la lista como un bean en el contexto de su aplicación. A continuación, puede reutilizar la lista para inyectarla en otras definiciones de bean.

Como complemento de la respuesta de Jakub, si planea usar JavaConfig, también puede realizar el autoaumento de esa manera:

 import com.google.common.collect.Lists; import java.util.List; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; < ...> @Configuration public class MyConfiguration { @Bean public List stages(final Stage1 stage1, final Stage2 stage2) { return Lists.newArrayList(stage1, stage2); } } 

Y así es como inyectar un conjunto en alguna propiedad en Spring:

          
            

define esos beans (test1, test2) después 🙂