有没有办法,我可以通过它为spring bean设置setter方法的订单。
例如:
<bean id="tester" class="commons.PropertyTester">
<property name="value1" value="${xyz}"></property>
<property name="value2" value="${abc}"></property>
</bean>
在上面的场景中,value1的setter在set2的value2之前被调用。
当我按如下方式改变属性顺序时
<bean id="tester" class="commons.PropertyTester">
<property name="value2" value="${port}"></property>
<property name="value1" value="${server}"></property>
</bean>
在value1之前调用Value2 setter方法。
是否有任何优雅的方法可以强制在value2之前始终为value1调用setter。
一种方法是在value2的setter中抛出异常。为用户提供所需的订单。 还有其他办法吗?
答案 0 :(得分:11)
我猜你在设置器中做了一些逻辑,在设置value2
时假设value1
可用。您应该使用@PostContruct
注释,而不是依赖于此类订单。
@PostConstruct
public void init() {
//here you are guaranteed to have all the dependencies injected
}
如果您愿意,可以改为实施InitializingBean
。
回到你原来的问题:我认为没有任何关于在Spring中调用setter的顺序的保证 - 或者至少我认为没有这样的顺序而且不依赖于它。