- 首先Bean对象由spring容器管理
- 其次默认的spring初始化一个类时,其相关依赖的组件都会被初始化
- 然而自己new出来的类,其相关依赖的组件不会被初始化,因为绕过了spring
- 所以我们需要通过spring来获取我们自己的线程类,才能在线程中对数据库进行增删查改等操作
一、配置spring上下文
@Component
public class ApplicationContextProvider implements ApplicationContextAware {
private static ApplicationContext context;
private ApplicationContextProvider(){}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static <T> T getBean(String name,Class<T> aClass){
return context.getBean(name,aClass);//获取Spring容器中已初始化的bean
}
}
二、定义线程类
@Component("myThread")
@Scope("prototype")
public class MyThread extends Thread {
//此时已经跟spring初始化的类无区别了,你可以正常的使用@Resource引入资源之类的
@Override
public void run() {
//放子线程执行代码
}
}
三、启动线程类
MyThread m1 = ApplicationContextProvider.getBean("myThread", MyThread.class);
m1.start();