简体   繁体   English

如何将xml配置bean转换为Java配置bean?

[英]How to translate xml configuration bean to Java config bean?

I am rewriting a legacy project using Quartz and Spring Framework. 我正在使用Quartz和Spring Framework重写旧项目。 The original configuration is in XML and now I am translating it into Java Config. 原始配置为XML,现在我将其转换为Java Config。 The xml configuration uses jobDetail to set the job detail property of the trigger bean. xml配置使用jobDetail设置触发器bean的job detail属性。 However, when I try to use the equivalent method, ie the setter: setJobDetails(simpleJobDetail), I got a warning that the setter does not have correct type (expecting JobDetails, but got MethodInvokingJobDetailFactoryBean). 但是,当我尝试使用等效的方法(即setter:setJobDetails(simpleJobDetail))时,我收到警告,该setter的类型不正确(期望JobDetails,但是得到了MethodInvokingJobDetailFactoryBean)。

May I know whether it is correct to translate xml bean configuration to Java COnfig by using the equivalent named setter in Java COnfig? 我是否可以知道通过使用Java COnfig中的等效setter将xml bean配置转换为Java COnfig是否正确?
Why in the XML property setting, the trigger bean can set its jobDetail property as the simpleJobDetail bean (which has type MethodInvokingJobDetailFactoryBean) , while the Java Config could not? 为什么在XML属性设置中,触发器Bean可以将其jobDetail属性设置为simpleJobDetail bean(其类型为MethodInvokingJobDetailFactoryBean),而Java Config无法设置?

XML config: XML配置:

<!-- For times when you just need to invoke a method on a specific object -->
<bean id="simpleJobDetail"
    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="reader" />
    <property name="targetMethod" value="readData" />
</bean>

<!-- Run the job every 60 seconds with initial delay of 1 second -->
 <bean id="trigger"
    class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
    <property name="jobDetail" ref="simpleJobDetail" />
    <property name="repeatInterval" value="600000" />
</bean>

Java Config: Java配置:

    @Bean
public MethodInvokingJobDetailFactoryBean simpleJobDetail() {
    MethodInvokingJobDetailFactoryBean simpleJobDetail = new MethodInvokingJobDetailFactoryBean();
    simpleJobDetail.setTargetObject(reader());
    simpleJobDetail.setTargetMethod("readData");
    return simpleJobDetail;
}



@Bean
private Object reader() {
    // TODO: 10/13/2016
    return null;
}

@Bean
public SimpleTriggerFactoryBean trigger() {
    final SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
    trigger.setJobDetail( simpleJobDetail()); // got warning about wrong type
    trigger.setRepeatInterval(60000);
    return trigger;
}

Note that simpleJobDetail() returns a factory, not the bean itself. 注意,simpleJobDetail()返回一个工厂,而不是bean本身。 You can rely on autowiring to inject a JobDetail built using this factory. 您可以依靠自动装配来注入使用此工厂构建的JobDetail。

@Bean
public SimpleTriggerFactoryBean trigger(final JobDetail simpleJobDetail) {
    final SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();
    trigger.setJobDetail(simpleJobDetail); // got warning about wrong type
    trigger.setRepeatInterval(60000);
    return trigger;
}

Hope it helps. 希望能帮助到你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM