Spring不支持靜態變量注入原因及其解法

Spring不支持靜態變量注入原因及其解法

場景重現:

以下變量在使用時會報空指針

@Autowired
private static ReadService readService;

原因分析:

靜態變量/類變量不是對象的屬性,而是一個類的屬性,spring則是基於對象層面上的依賴注入。靜態變量不屬於對象,只屬於類,也就是說在類被加載字節碼的時候變量已經初始化了,也就是給該變量分配內存了,導致spring忽略靜態變量。

解決方案

還記得Spring注入的時候要求對象實現對應屬性的Set()方法麼?我們可以重寫靜態變量的set方法:

    private static ReadService readService;

    @Autowired
    public void setReadService(ReadService readService) {
        Commons.readService = readService;
    }

後話

遇到這個問題主要是我想做一個工具類,而這個工具類需要調用Service服務。除了解決靜態service服務無法注入,實現工具類,還有另外一種解決方案————》把靜態工具類寫成一個抽象類(不使用static方法),在需要用到的時候繼承這個抽象類。

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