1.问题描述
开发过程中遇到一个问题,在一个工具类中的静态方法中,调用mybatis的mapper接口时,会出现@Autowired无法注入的问题,即使添加了这个注解,spring容器加载完成声明的参数也是空值。
原因分析:在SpringFramework里,我们是不能@Autowired一个静态变量,使之成为一个Spring bean。因为当类加载器加载静态变量时,Spring上下文尚未加载,所以类加载器不会在bean中正确注入静态类,并且会失败。
2.解决办法
@Component
public class UserUtils {
//@Resource
@Autowired
private UserInfoMapper userInfoMapper;
private static UserUtils userUtils;
@PostConstruct
public void init() {
uploadUtils = this;
}
public static Map getUserInfo(String userId) {
Map userInfo = userUtils.userInfoMapper.selectUserInfoById(userId);
// do something...
}
}
注解加载顺序:@PostConstruct >> @Autowired >> @PostConstruct;@Autowired可替换为@Resource