SpringBoot如何在靜態工具類中注入mapper

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章