java spring tutorial - Wie definiert man eine List Bean im Frühling?





5 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>
boot download framework

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

}



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.




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




Related


Tags

java   spring