tutorial springframework framework descargar java spring

java - springframework - spring framework tutorial



¿Cómo definir un bean de lista en primavera? (10)

Aquí hay un método:

<bean id="stage1" class="Stageclass"/> <bean id="stage2" class="Stageclass"/> <bean id="stages" class="java.util.ArrayList"> <constructor-arg> <list> <ref bean="stage1" /> <ref bean="stage2" /> </list> </constructor-arg> </bean>

Estoy usando Spring para definir etapas en mi aplicación. Está configurado que la clase necesaria (aquí denominada 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 denominado Stages 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?


Como una adición a la respuesta de Jakub, si planea usar JavaConfig, también puede autowire 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<Stage> stages(final Stage1 stage1, final Stage2 stage2) { return Lists.newArrayList(stage1, stage2); } }


Creo que puedes 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 <list> como su valor, y le da al bean un atributo id . Luego, cada vez que use el id declarado como ref o similar en alguna otra declaración de bean, se crea una instancia de una nueva copia de la lista. También puede especificar la clase de List que se utilizará.


Importar el espacio de nombres util de primavera. A continuación, puede definir un bean de lista de la siguiente manera:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd"> <util:list id="myList" value-type="java.lang.String"> <value>foo</value> <value>bar</value> </util:list>

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


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

@Autowired private List<Stage> stages;

y la primavera 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<Stage> stages() { return Lists.newArrayList(stage1, stage2); } }

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

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


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

<bean id="listBean" class="java.util.ArrayList"> <constructor-arg> <value>#{springDAOBean.getGenericListFoo()}</value> </constructor-arg> </bean>

Estaba tratando de averiguar cómo podría hacer esto con la lista util: pero no pude hacer que funcionara debido a errores de conversión.


Utilice el espacio de nombres util, 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.


Y así es como se inyecta el set en alguna propiedad en Spring:

<bean id="process" class="biz.bsoft.processing"> <property name="stages"> <set value-type="biz.bsoft.AbstractStage"> <ref bean="stageReady"/> <ref bean="stageSteady"/> <ref bean="stageGo"/> </set> </property> </bean>


<bean id="student1" class="com.spring.assin2.Student"> <property name="name" value="ram"></property> <property name="id" value="1"></property> <property name="listTest"> <list value-type="java.util.List"> <ref bean="test1"/> <ref bean="test2"/> </list> </property> </bean>

Definir esos frijoles (test1, test2) después :)


<bean id="someBean" class="com.somePackage.SomeClass"> <property name="myList"> <list value-type="com.somePackage.TypeForList"> <ref bean="someBeanInTheList"/> <ref bean="someOtherBeanInTheList"/> <ref bean="someThirdBeanInTheList"/> </list> </property> </bean>

Y en SomeClass:

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