2021解决SpringBoot中非Controller类调用service方法为null空指针,报错NullPointerException的解决

2021解决SpringBoot中非Controller类调用service方法为null空指针,报错NullPointerException的解决

目录

问题描述

在springboot项目中,非controller层的类调用service层中的方法(普通类调用service层中的接口实现数据库操作)时,报java.lang.NullPointerException这个错误。

原因

service无法导入到非controller层中去。

当前配置环境

SpringBoot V2.4.2
Druid V1.1.17
Mybatis-plus V3.4.2

解决办法

步骤

  1. 该类使用@Component注解
  2. 添加一个本类类型的公有静态字段 (其他教程就是因为设为私有导致无效)
  3. 创建一个初始化方法,贴上@PostConstruct 标签,用于注入bean
  4. 创建方法调用mapper或service接口
  5. 最后直接在普通类中调用即可(通过本类型调用)

代码

@Component  //重点
public class TestServerse{
    @Autowired
    //正常引用目标service  
    private OtherService otherService ;
    //将自己作为静态变量引入,使SpringBoot初始化之前就被创建
    public static TestServerse testServerse; //public极为重要
     /**
     * 重新构造一个方法
     * 通过 @PreDestroy 或 @PostContruct 实现初始化和销毁bean之前进行的操作
     * @PostContruct 这个注解就是在springboot启动前就加载
     */
    @PostConstruct 
    public void init() {  
        testServerse = this;  
        testServerse.otherService = this.otherService ;        
        // 初使化时将已静态化的otherService实例化
    }  
    //测试调用
    public void test(){
    	//调用时需要用testServerse.otherService的方式使用目标otherservice中的addXX方法
        testServerse.otherService.addXX(xx);
    }

结束

主要问题

解决代码很多,能用的很少。
实际使用确实需要根据自己不同的问题来具体解决。

我的博客

https://home.cnblogs.com/u/mryaohu


版权声明:本文为niaoyi0357原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。