靜態方法中呼叫mapper,防止NullPointException空指標異常
阿新 • • 發佈:2020-09-02
靜態方法中呼叫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即可