spring如何控制对象创建的顺序?

Posted

技术标签:

【中文标题】spring如何控制对象创建的顺序?【英文标题】:how to control the sequence of object creation in spring? 【发布时间】:2017-03-12 01:31:41 【问题描述】:

在基于 xml 的方法中,我们在 xml 中配置 bean 定义, bean 将按照我们定义 bean 的顺序创建。

1) <beans>

<bean id="a" class="com.abc.a"/>

`<bean id="b" class="com.abc.b"/>`

&lt;/beans&gt; 在这里,a 会在 b 之前被创建。

2)&lt;beans&gt; &lt;bean id="a" class="com.abc.a"&gt; &lt;property name="c" ref="c"/&gt; &lt;/bean&gt;

&lt;bean id="b" class="com.abc.b/"&gt;

&lt;bean id="c" class="com.abc.c/"&gt; 这里会先创建 c,然后是 a,然后是 b

在注解驱动的情况下,如何控制对象创建的顺序?使用有序接口?

【问题讨论】:

你为什么在乎?请在代码块中将 XML 发布为 XML。 【参考方案1】:

Spring 有一个 java config 的 Order 属性和一个用于 xml 配置的 order 属性来控制创建 bean 的顺序。 (较低的值意味着较早的创建,也允许负数)

另一种方式是控制顺序是DependsOn注解/属性。

【讨论】:

【参考方案2】:

Spring 容器首先在 xml 和注释方法中创建依赖对象(因为主要对象根据对象图需要它们)。

在注解驱动的情况下,如何控制对象创建的顺序?使用有序接口?

您无法控制对象的顺序,因为始终需要先创建依赖对象,然后再创建主对象。 订单接口用于不同的目的,即使用自动装配将对象推送到列表中。

您可以参考以下链接中的示例,以使用@Order 将对象设置/推送到列表中:

What is the use of @Order annotation in Spring?

【讨论】:

以上是关于spring如何控制对象创建的顺序?的主要内容,如果未能解决你的问题,请参考以下文章

Spring注解总结

Spring-HelloSpring-IOC创建对象的方式

spring创建Bean对象的控制

控制反转 & Ioc创建对象的基础方式

spring之控制反转

Spring