Estoy usando Spring para definir etapas en mi aplicación. Está configurado para que la clase necesaria (aquí llamada Configurator
) se inyecte 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 la clase Configurator
.
Mi idea:
definir un nuevo bean llamado Etapas e inyectarlo en Configurator
y LoginBean
. Mi problema con esta idea es que no sé cómo transformar esta propiedad:
<property ...>
<list>
<bean ... >...</bean>
<bean ... >...</bean>
<bean ... >...</bean>
</list>
</property>
en un frijol
Algo como esto no funciona:
<bean id="stages" class="java.util.ArrayList">
¿Puede alguien ayudarme con esto?
<property name="beanList" ref="myList"/>
@Autwired
no ayuda al inyectar una lista creada de esta manera. Sin embargo,@Resource
funciona. es decir@Resource List<String> myList
Aquí hay un método:
fuente
StageClass
declaraciones de frijol para<list>
evitar la necesidad de los<ref>
elementos.Otra opción es usar JavaConfig. Suponiendo que todas las etapas ya están registradas como frijoles de primavera, solo tiene que:
y spring los inyectará automáticamente en esta lista. Si necesita preservar el orden (la solución superior no lo hace), puede hacerlo de esa manera:
La otra solución para preservar el orden es usar una
@Order
anotación en beans. Luego, la lista contendrá beans ordenados por valor de anotación ascendente.fuente
Y en SomeClass:
fuente
Stacker planteó una gran respuesta, iría un paso más allá para hacerlo más dinámico y usar Spring 3 EL Expression.
Estaba tratando de descubrir cómo podría hacer esto con la lista util: pero no pude hacerlo funcionar debido a errores de conversión.
fuente
Creo que puedes estar buscando
org.springframework.beans.factory.config.ListFactoryBean
.Usted declara una instancia ListFactoryBean, proporcionando la lista para ser instanciada como una propiedad con un
<list>
elemento como su valor, y le da al bean unid
atributo. Luego, cada vez que use el declaradoid
comoref
o similar en alguna otra declaración de bean, se crea una nueva copia de la lista. También puede especificar laList
clase que se utilizará.fuente
define esos beans (test1, test2) después :)
fuente
Utilice el espacio de nombres de utilidades, podrá registrar la lista como un bean en el contexto de su aplicación. Luego puede reutilizar la lista para inyectarla en otras definiciones de bean.
fuente
Como complemento a la respuesta de Jakub, si planea usar JavaConfig, también puede conectar automáticamente de esa manera:
fuente
Simplemente eliminas
id
los frijoles dentro de la<list>
etiqueta. Me gusta esto:fuente
Y así es como inyectar set en alguna propiedad en Spring:
fuente
Inyectar lista de cadenas.
Suponga que tiene una clase de modelo de países que toma una lista de cadenas como la siguiente.
Siguiendo la definición xml, defina un bean e inyecte una lista de países.
Enlace de referencia
Inyectar lista de Pojos
Supongamos que tiene una clase de modelo como la siguiente.
Frijoles Definiciones.
Enlace de referencia .
fuente