Spring:未调用Bean init方法,其属性不接受值

时间:2012-09-19 08:31:34

标签: spring inversion-of-control

我有两个类似的豆子。它们设置为在ScheduledTimerTask中调用。

但是一个工作正常,另一个不工作!以下是这两种配置:

<!--  Clear Orders By Sessions -->
<bean id="clearExpiredSessionOrdersTask" class="com.datx.timers.ClearExpiredSessionOrdersTask" autowire="byName">
    <property name="period" value="00:02:10"/>
</bean>

<bean id="clearExpiredSessionOrdersTaskInvoker"
    class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
    <property name="targetObject" ref="clearExpiredSessionOrdersTask" />
    <property name="targetMethod" value="doTask" />
</bean>

<bean id="clearExpiredSessionOrdersTaskTimer" class="org.springframework.scheduling.timer.ScheduledTimerTask">
    <property name="timerTask" ref="clearExpiredSessionOrdersTaskInvoker" />
    <property name="delay" value="1000" /><!-- In miliseconds -->
    <property name="period" value="130000" /><!-- In miliseconds -->
</bean>
<!--  Clear Orders By Sessions -->

这是正在运作的那个。我的班级在第一行是com.datx.timers.ClearExpiredSessionOrdersTask

另一个bean设置如下:

<!-- DocumentScheduleTask -->

<bean id="documentSchaduleTask" class="com.datx.timers.DocumentSchaduleTask" autowire="byName" init-method="init">
     <property name="period" value="00:02:10"/>
</bean>

<bean id="documentSchaduleTaskInvoker"
    class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
    <property name="targetObject" ref ="documentSchaduleTask" />
    <property name="targetMethod" value="doTask" />
</bean>

<bean id="documentSchaduleTaskTimer" class="org.springframework.scheduling.timer.ScheduledTimerTask">
    <property name="timerTask" ref="documentSchaduleTaskInvoker" />
    <property name="delay" value="1000" /><!-- In miliseconds -->
    <property name="period" value="130000" /><!-- In miliseconds -->
</bean>


<!-- DocumentScheduleTask -->
你看到了相似之处吗?第一行再次是我的班级。

这是我的DocumentScheduleTask课程:

public class DocumentSchaduleTask{
    private String period;
    public init(){
       System.out.println("Test");
    }
    public void doTask(){
        //This method is called at a specific time
    }

    public void setPeriod(String period){
        this.period = period;
    }
    public String getPeriod(){
        return this.period;
    }
}

其余配置相同。但在第二个中,period属性没有价值。并且不调用其init方法。这些暗示是什么?

为什么会造成这种情况?我应该在哪里寻找?你有没有看到任何差异?

1 个答案:

答案 0 :(得分:0)

我对这种差异的担忧是第二种配置中的init方法。 AFAIK init在属性设置为bean后调用,因此可能init方法中的代码可能会清除该值。请为DocumentSchaduleTask添加init方法的源代码。

而且,也许,你的错字号 a duler会因为你的名字自动装配而导致一些问题。