这是一个基本问题 - 当加载spring bean时,如果我有一个构造函数和setter,哪个将首先被调用?
由于
答案 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)。