您的位置:首页 > 移动开发

Quarz调度通过ApplicationContext获取Service实例

2020-03-06 21:34 1176 查看

项目中需要继承Quartz框架。项目的环境是SSM框架
遇到的问题是:在quartz的Job中使用@Autowired自动注入service时候报错,报service为null。

quarz调度不受spring容器管理,不能直接使用@AutoWired注入service

问题:如何在非spring容器中(非controller中)使用service方法。
思路:可以通过ApplicationContext 实例去获取bean
解决方法:
1、编写工具类继承ApplicationContextAware类

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.ComponentScan;

public class ApplicationContextSup implements ApplicationContextAware{
private static ApplicationContext context ;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context=applicationContext;
}
public static Object getBean(String beanName){
return context.getBean(beanName);
}

public static <T> T getBean(Class<T> tClass){
return context.getBean(tClass);
}

}

2、在spring.xml中配置bean如下:

<bean id="ApplicationContextSup" class="com.quarz.ApplicationContextSup"></bean>

3、在web.xml配置监听器

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

4、最后可以在quarz作业中使用ApplicationContext获取bean

AAService aaservice = (AAService) ApplicationContextSup.getBean(AAService.class);
  • 点赞
  • 收藏
  • 分享
  • 文章举报
qq_35946231 发布了1 篇原创文章 · 获赞 0 · 访问量 252 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: