原因分析:
Runnable不受Spring容器管理,需要手动注入bean
解决:
- 编写一个应用上下文工具类
@Component
public class SpringContextUtils implements ApplicationContextAware {
/**
* 应用上下文
*/
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtils.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) throws BeansException {
return (T)applicationContext.getBean(name);
}
public static <T> T getBean(Class<T> clz) throws BeansException {
return (T)applicationContext.getBean(clz);
}
}
- 去掉@Autowired,在Run中使用如下语句
/**
* 在Runnable @Autowired注入会null 所以需要手动注入
*/
private BrushCardacsDao brushCardacsDao;
//手动注入
brushCardacsDao = SpringContextUtils.getApplicationContext().getBean(BrushCardacsDao.class);
类似的,其它的不受Spring管理的也可以通过此方式解决。
每天进步一点点,开心也多一点点