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