当加载spring bean时,如果我有一个构造函数和setter,哪个将首先被调用?

时间:2010-03-05 05:31:34

标签: spring

这是一个基本问题 - 当加载spring bean时,如果我有一个构造函数和setter,哪个将首先被调用?

由于

4 个答案:

答案 0 :(得分:10)

在调用任何setter方法之前,必须先调用构造函数 。使用init-method告诉Spring在调用setter之后调用一些逻辑

<bean class="my.CoolClass" init-method="startup">
    <constructor-arg value="Foo" />
    <property name="bar" value="baz" />
</bean>

答案 1 :(得分:2)

是否必须首先调用构造函数? setter是实例方法,因此在实例化对象之前无法调用。

答案 2 :(得分:2)

我不认为Spring对调用setter的顺序提供任何保证。无论调用setter的顺序如何,都可以使bean工作。如果要在调用所有setter之后进行一些处理,您可能会发现使用post construction method很方便。或者,如果您使用的是XML配置而不是注释,an initialization method可能适合。

答案 3 :(得分:0)

我编写了简单的XML配置并在调试器中逐步执行Spring源代码。

似乎使用Spring 3.x可以在XML bean 定义中结合 constructor-arg 属性(检查AbstractAutowireCapableBeanFactory.java中的 doCreateBean ,其中 createBeanInstance - 构造函数和 populateBean 下一个 - setter)。

另见https://softwareengineering.stackexchange.com/questions/149378/both-constructor-and-setter-injection-together-in-spring/