Spring setter方法顺序

时间:2011-02-28 07:37:28

标签: spring

有没有办法,我可以通过它为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中抛出异常。为用户提供所需的订单。 还有其他办法吗?

1 个答案:

答案 0 :(得分:11)

我猜你在设置器中做了一些逻辑,在设置value2时假设value1可用。您应该使用@PostContruct注释,而不是依赖于此类订单。

@PostConstruct
public void init() {
    //here you are guaranteed to have all the dependencies injected
}

如果您愿意,可以改为实施InitializingBean

回到你原来的问题:我认为没有任何关于在Spring中调用setter的顺序的保证 - 或者至少我认为没有这样的顺序而且不依赖于它。