问题:在多线程中注入某一个bean,受线程安全考虑,采用
@Autowired 注解不生效,反馈空指针异常,所以需要手动注入bean。
第一步是创建普通类获取spring容器中的bean工具类
@Component public class SpringContextUtil implements ApplicationContextAware { public static ApplicationContext applicationContext = null; @Override public void setApplicationContext(ApplicationContext application) { SpringContextUtil.applicationContext = application; } public static ApplicationContext getApplicationContext() { return applicationContext; } public static Object getBean(String name){ return getApplicationContext().getBean(name); } public static <T> T getBean(Class<T> clazz){ return getApplicationContext().getBean(clazz); } public static <T> T getBean(String name,Class<T> clazz){ return getApplicationContext().getBean(name, clazz); } }
第二部是在线程里面手动注入这个bean
private UserService userService; 在run()中写: userService = SpringContextUtil.getBean(UserService.class); int i = userService.selectCountQuery();
类上添加注解@Component