Spring中bean初始化的顺序

时间:2015-08-20 14:38:34

标签: java spring spring-mvc

我的Spring配置文件中有以下bean:

<bean id="myList" class="java.util.ArrayList">
    <constructor-arg>
        <list>
            <ref bean="elem1"/>
            <ref bean="elem2"/>
            <ref bean="elem3"/>
            <ref bean="elem4"/>     
        </list>
    </constructor-arg>
</bean>
<bean id="elem4" class="myClass">
    <property name="title" value="random4"/>
</bean>
<bean id="elem1" class="myClass">
    <property name="title" value="random1"/>
</bean>
<bean id="elem3" class="myClass">
    <property name="title" value="random3"/>
</bean>
<bean id="elem2" class="myClass">
    <property name="title" value="random2"/>
</bean>

我注意到在我的应用程序中,myList中的元素按以下顺序排列:elem4,elem1,elem3,elem2。当我宣布ref bean(elem1,elem2,elem3,elem4)时,我期待列表中的元素将按照我设置的顺序排列。 是否有一个Spring初始化bean的顺序? 有没有办法可以为列表中的元素指定订单?

1 个答案:

答案 0 :(得分:0)

春天确实尊重你在列表中给出的顺序。列表中的元素将完全是您指定的[elem1,elem2,elem3,elem4]。否则,你做错了什么,你能展示出打印不同订单的代码吗?

但是bean初始化的顺序可能会有所不同,并且取决于bean的依赖关系,所以,例如,如果你有两个bean

<bean id="holder" class="my.HolderBean" lazy-init="false">
   <property name="inner" ref="inner"/>
</bean>
<bean id="inner" class="my.InnerBean" lazy-init="false"/>

然后,无论xml定义顺序如何,都将首先初始化InnerBean,然后在HolderBean初始化期间将其注入HolderBean。