Spring setter方法顺序

blo*_*lob 10 spring

有没有办法,我可以通过它为spring bean设置setter方法的顺序.

例如:

<bean id="tester" class="commons.PropertyTester">   
    <property name="value1" value="${xyz}"></property>
    <property name="value2" value="${abc}"></property>
</bean>
Run Code Online (Sandbox Code Playgroud)

在上面的场景中,value1的setter在value2的setter之前被调用.

当我颠倒属性的顺序如下

<bean id="tester" class="commons.PropertyTester">
    <property name="value2" value="${port}"></property> 
    <property name="value1" value="${server}"></property>
</bean>
Run Code Online (Sandbox Code Playgroud)

在value1之前调用Value2 setter方法.

是否有任何优雅的方式可以强制在value2之前始终为value1调用setter.

一种方法是在value2的setter中抛出异常.为用户提供所需的顺序.还有其他方法吗?

Tom*_*icz 11

我猜你在设置器中做了一些逻辑,并设置value2你假设value1可用.您应该使用@PostContruct注释,而不是依赖于这样的顺序.

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

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

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