In Spring Boot, you can use appContext. getBeanDefinitionNames() to get all the beans loaded by the Spring container.
Import the spring util namespace. Then you can define a list bean as follows:
<?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>
The value-type is the generics type to be used, and is optional. You can also specify the list implementation class using the attribute list-class.
Here is one method:
<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>
    Another option is to use JavaConfig. Assuming that all stages are already registered as spring beans you just have to:
@Autowired
private List<Stage> stages;
and spring will automatically inject them into this list. If you need to preserve order (upper solution doesn't do that) you can do it in that way:
@Configuration
public class MyConfiguration {
  @Autowired
  private Stage1 stage1;
  @Autowired
  private Stage2 stage2;
  @Bean
  public List<Stage> stages() {
    return Lists.newArrayList(stage1, stage2);
  }
}
The other solution to preserve order is use a @Order annotation on beans. Then list will contain beans ordered by ascending annotation value.
@Bean
@Order(1)
public Stage stage1() {
    return new Stage1();
}
@Bean
@Order(2)
public Stage stage2() {
    return new Stage2();
}
    <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>
And in SomeClass:
class SomeClass {
    List<TypeForList> myList;
    @Required
    public void setMyList(List<TypeForList> myList) {
        this.myList = myList;
    }
}
    
                If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With