靜態方法中調用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即可