静态方法中调用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即可

posted @ 2020-09-02 16:33  食摄大叔  阅读(4214)  评论(0)    收藏  举报