- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当我运行 TaskJob 时,我收到空指针异常,因为 Spring 不会 Autowiring serviceJob 服务。新线程是否导致此问题,因为 Spring Autowiring mysqlService 没有任何问题?
public class TaskJob implements Runnable {
@Autowired
private ServiceJob serviceJob;
String name;
String source;
public TaskJob(String name, String source) {
this.name = name;
this.source = source;
}
public void run() {
serviceJob.run();
}
}
@Service
public class ServiceJob extends BaseJob{
@Autowired
private MysqlService mysqlService;
public void run(){
....
}
}
@Service
public class MysqlService {
...
}
我的applicationContext.xml;
<context:component-scan base-package="cm.*" />
我的类(class)是;
cm.tasks.jobs.TaskJob
cm.jobs.ServiceJob
cm.services.MysqlService;
编辑: TaskJob 实例化为;
TaskJob taskJob = new TaskJob(name, source);
Thread taskThread = new Thread(taskJob);
taskThread.start();
最佳答案
Spring 只 Autowiring 它创建的组件。您正在调用 new TaskJob(),Spring 不知道此对象,因此不会发生 Autowiring 。
作为解决方法,您可以直接调用应用程序上下文。首先获取应用程序上下文的句柄。这可以通过为应用程序上下文本身添加@Autowire 来完成。
@Autowired
private ApplicationContext applicationContext;
当您创建 TaskJob 时,请应用上下文执行您的 Autowiring 。
TaskJob taskJob = new TaskJob(name, source);
applicationContext.getAutowireCapableBeanFactory().autowireBean(taskJob);
此外,如果您有任何需要触发的 @PostConstruct
注释方法,您可以调用 initializeBean()
applicationContext.getAutowireCapableBeanFactory().initializeBean(taskJob, null);
关于java - Spring @Autowired 不在新线程上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42502362/
的宽度变窄了。为什么?
作者热门文章
滴滴打车优惠券免费领取
|
我是一名优秀的程序员,十分优秀!