如何在自定义的线程中获取注入到容器中的对象,并使用该对象操作数据
在自定义的线程中是无法最直接使用@Autowired创建对象的,因为我们使用的线程是new对象的方式创建的·,所以和spring容器半毛钱关系都没有
这里需要小伙伴手动创建
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* @Author Yourheart
* @Date 2022/12/6 16:12
*/
@Component
public class SpringBeanUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringBeanUtil.applicationContext=applicationContext;
}
public static ApplicationContext getContext(){
return applicationContext;
}
public static Object getBeanByName(String beanName){
if (applicationContext==null){
return null;
}
return applicationContext.getBean(beanName);
}
public static <T> T getBean(Class<T> type){
return applicationContext.getBean(type);
}
}
然后呢获取对象
import com.alibaba.fastjson.JSONObject;
import com.java.mapper.TestMapper;
import com.java.util.SpringBeanUtil;
import com.java.util.Utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* @Author Yourheart
* @Date 2022/12/6 15:46
*/
@Slf4j
@Component
@Lazy
public class TestDemo implements Runnable{
private TestMapper testMapper=SpringBeanUtil.getBean(TestMapper.class);
@Override
public void run() {
for (int k=0;k<200;k++){
log.error("k:{}",k);
testMapper.dataTest();
}
}
}
这里使用@Lazy,不然启动就会报错,下面就可以愉快的操作数据库,各种方法了
浙公网安备 33010602011771号