原因就是spring和多线程安全的问题,不让注入
第一种:手动获取,获取spring上下文,写一个工具通过BeanName获取
解决方法:手动获取
package com.test.configs;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class BeanContext implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
BeanContext.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);
}
}
创建thread
- import com.test.configs.BeanContext;
- import com.test.service.TestService;
- import com.test.model.User;
- /**
- * created by huguoju on 2017/11/13.
- */
- public class TestHandler implements Runnable {
- private User user;
- private TestService testService;
- @Override
- public void run() {
- this.testService= BeanContext.getApplicationContext().getBean(TestService.class);
- User user=testService.queryUserById(11);
- }
- public User getUser() {
- return user;
- }
- public void setUser(User user) {
- this.user = user;
- }
- }
第二种:通过构造方法注入实现。