【问题标题】:Spring setter method orderSpring setter 方法顺序
【发布时间】:2011-02-28 07:37:28
【问题描述】:

有什么方法可以让我在 spring bean 上设置 setter 方法的顺序。

例如:

<bean id="tester" class="commons.PropertyTester">   
    <property name="value1" value="${xyz}"></property>
    <property name="value2" value="${abc}"></property>
</bean>

在上述场景中,value1 的 setter 在 value2 的 setter 之前被调用。

当我如下颠倒属性顺序时

<bean id="tester" class="commons.PropertyTester">
    <property name="value2" value="${port}"></property> 
    <property name="value1" value="${server}"></property>
</bean>

Value2 的 setter 方法在 value1 之前被调用。

有什么优雅的方法可以强制我们总是在 value2 之前为 value1 调用 setter。

一种方法是在 value2 的 setter 中抛出异常......向用户询问所需的顺序。 有没有其他办法?

【问题讨论】:

    标签: spring


    【解决方案1】:

    我猜你在设置器中做了一些逻辑,在设置value2 时,你假设value1 可用。不要依赖这样的顺序,你应该使用@PostContruct注解。

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

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

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

    【讨论】:

    猜你喜欢
    • 2015-07-23
    • 2015-09-25
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2011-07-09
    相关资源
    最近更新 更多