靜態方法中調用mapper,防止NullPointException空指針異常


靜態方法中調用mapper

在Util工具類中的一個方法里,需要調用mapper來實現功能,在靜態方法里直接注入@Autowired會報NullPointException空指針異常.

嘗試過兩種方法實現功能:

方法一


1.類上添加@Service注解

2.創建靜態mapper對象

3.@Autowired注入set方法,調用靜態對象

@Service
public class CommonUtil{
    private static CommonMapper commonMapper;
    
    @Autowired
    public void setCommonMapper(CommonMapper commonMapper){
        CommonUtil.commonMapper = commonMapper;
    }
}

此方法可以正常運行,不會報空指針異常,但Sonar掃描時會提示:普通方法調用靜態字段問題

建議修改方法:將非靜態方法中對靜態方法賦值的語句,單獨封裝一個靜態方法,並且加上synchronized關鍵字,這樣就不會導致多線程修改字段導致的其他問題.

方法二


1.類上添加@Component注解

2.Autowired注入需要使用的mapper對象(非靜態的)

3.添加一個本類類型的靜態字段

4.創建初始化方法,貼上@PostConstruct標簽,用於注入bean

5.創建方法調用mapper

@Component
public class CommonUtil{
    @Autowired
    private CommonMapper commonMapper;
    
    private static CommonUtil commonUtil;
    
    @PostConstruct
    public void init(){
        checkUtil = this;
        checkUtil.commonMapper = this.commonMapper;
    }
}

方法中調用checkUtil.commonMapper即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM