Spring 实现线程接口 Runnable 注解注入失败 @Resource annotation is not supported on static fields

来源:互联网 发布:晨曦计价软件视频教程 编辑:程序博客网 时间:2024/05/22 08:17

原因就是spring和多线程安全的问题,不让注入
解决方案有以下几种

一.变量前缀加static,生成set方法并加上@Resource,记住把set方法 static 去掉,否则会抛出 @Resource annotation is not supported on static fields

private static VerificDao verificDao;@Resourcepublic void setVerificDao(VerificDao verificDao) {    CheckVoiceVerify.verificDao = verificDao;}

二.根据spring上下文环境获取bean

import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.stereotype.Component;@Componentpublic class SpringContextUtil implements ApplicationContextAware {    // Spring应用上下文环境    private static ApplicationContext applicationContext;    /**     * 实现ApplicationContextAware接口的回调方法,设置上下文环境     */    public void setApplicationContext(ApplicationContext applicationContext)            throws BeansException {        SpringContextUtil.applicationContext = applicationContext;    }    public static ApplicationContext getApplicationContext() {        return applicationContext;    }    /**     * 获取对象 这里重写了bean方法,起主要作用     */    public static Object getBean(String beanId) throws BeansException {        return applicationContext.getBean(beanId);    }}

三. 在启动这个线程的时候,在这个线程的构造函数中把需要注入的对象传过去

new Thread(new CheckVoiceVerify(verifyService)).start();
0 0
原创粉丝点击