在ContextLoaderListener中使用注解注入的类和job中使用注解注入的类
2024-10-19 04:31:49
场景:在ContextLoaderListener子类中加载job,为JobFactory的实现类声明@Component后,在ContextLoaderListener子类中为scheduler设置JobFactory。(主要解决的问题:在spring与quartz调用job时,job中无法读取注解类,实现注入)
步骤一:
ContextLoaderListener子类中contextInitialized方法中代码如下:
super.contextInitialized(event); applicationContext = super.getCurrentWebApplicationContext(); scheduler = applicationContext.getBean(Scheduler.class); try { scheduler.setJobFactory(applicationContext.getBean(JobFactory.class)); } catch (BeansException e1) { logger.error(e1.getMessage(),e1); } catch (SchedulerException e1) { logger.error(e1.getMessage(),e1); }
步骤二: 声明JobFactory子类,和job中的服务类
package com.river.job.listener; import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.scheduling.quartz.AdaptableJobFactory;
import org.springframework.stereotype.Component; @Component
public class MyJobFactory extends AdaptableJobFactory {
// 这个对象Spring会帮我们自动注入进来,也属于Spring技术范畴.
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
protected Object createJobInstance(TriggerFiredBundle bundle)
throws Exception {
// 调用父类的方法
Object jobInstance = super.createJobInstance(bundle);
// 进行注入,这属于Spring的技术,不清楚的可以查看Spring的API.
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
package com.river.service1; import org.springframework.stereotype.Service; @Service
public class TestBean { }
步骤三:在spring-job.xml中加入要注入的包扫描
<context:component-scan base-package="com.river.job.listener" />
<context:component-scan base-package="com.river.service1" />
现在就可以测试一下,在job中测试结果如下:
river_Worker-2===============com.river.job.HiJobImp@596b2557 2015-09-07 18:41:30
com.river.service1.TestBean@7efd6242
可见这里拿到TestBean的对象了。
最新文章
- Socket通信综合示例
- WPF 后台读取样式文件
- 使用UG UISTYLER 窗体编辑器,创建对话框 part 2
- 纯CSS实现圆形进度条
- 【wikioi】1553 互斥的数(hash+set)
- UVALive 6145 Version Controlled IDE(可持久化treap、rope)
- Java Dns Cache Manipulator
- acdream 1412 2-3Trees (组合+DP)
- vi 命令 使用方法
- BOM元素之window对象
- 统计学习方法——CART, Bagging, Random Forest, Boosting
- windy数(数位DP)
- CSS3 动画及过渡详解
- java-框架-索引
- C# 计算位置居中
- OpenCV使用BGR而非RGB格式
- mysql 案例~ 分区表
- CheckTimeWait.bat实现windows下的TimeWait检查
- 统计学习方法c++实现之六 支持向量机(SVM)及SMO算法
- 【RF库Collections测试】Remove Duplicates