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