[java] Wie definiert man eine List Bean im Frühling?


4 Answers

Hier ist eine Methode:

<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>
Question

Ich verwende Spring, um Phasen in meiner Anwendung zu definieren. Es ist konfiguriert, dass die erforderliche Klasse (hier Configurator ) mit den Stufen injiziert wird.
Jetzt brauche ich die Liste der Stufen in einer anderen Klasse namens LoginBean . Der Configurator bietet keinen Zugriff auf seine Stage-Liste.

Ich kann den Klassenkonfigurator nicht ändern.

Meine Idee:
Definieren Sie eine neue Bean namens Stages und injizieren Sie sie in Configurator und LoginBean . Mein Problem mit dieser Idee ist, dass ich nicht weiß, wie man diese Eigenschaft transformiert:

<property ...>
  <list>
    <bean ... >...</bean>
    <bean ... >...</bean>
    <bean ... >...</bean>
  </list>
</property>

in eine Bohne.

So etwas funktioniert nicht:

<bean id="stages" class="java.util.ArrayList">

Kann mir jemand dabei helfen?




<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>

Und in SomeClass:

class SomeClass {

    private List<TypeForList> myList;

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

}



Als Ergänzung zu Jakubs Antwort können Sie, wenn Sie JavaConfig verwenden möchten, auch auf diese Weise autowire:

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);
    }
}



 <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>  

Definiere diese Beans (test1, test2) danach :)




Ich denke, dass Sie nach org.springframework.beans.factory.config.ListFactoryBean suchen.

Sie deklarieren eine ListFactoryBean-Instanz, indem Sie die Liste als Eigenschaft mit einem <list> -Element als Wert instanziieren und der Bean ein id Attribut zuweisen. Jedes Mal, wenn Sie die deklarierte id in einer anderen Bean-Deklaration als ref oder ähnlich verwenden, wird eine neue Kopie der Liste instanziiert. Sie können auch die zu verwendende List Klasse angeben.




Related



Tags

java java   spring