Util类调用Service中的方法报空指针异常

原因:Service注入失败

一、保证util类当前所在的包在springmvc配置的扫描路径下

二、操作

  1. 在工具类上加上@Component注解
  2. 使用@PostConstruct注解静态化当前工具类
  3. 调用Service时,使用静态化类调用
@PostConstruct注解:好多人以为是Spring提供的。其实是Java自己的注解。 Java中该注解的说明:@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法) 实战:在静态方法中调用依赖注入的Bean中的方法。(一般都是这样使用的) package com.example.studySpringBoot.util; import com.example.studySpringBoot.service.MyMethorClassService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @Component public class MyUtils { private static MyUtils staticInstance = new MyUtils(); @Autowired private MyMethorClassService myService; @PostConstruct public void init(){ staticInstance.myService = myService; } public static Integer invokeBean(){ return staticInstance.myService.add(10,20); } }

贴上一个自己写的实战栗子:

首先我的util中需要调用service中的方法,但是一直在报NullPointer的错误。

使用上面的方法就能避免报上面的错误啦!!!!!!!!!!!!!!

源码:(贴上源码方便复制哦!!!!!!!!!)

@Component
public class QuartzUtil {

    @Autowired
    private SynchronizeDataLogService synchronizeDataLogService;

    @Autowired
    private ParameterService parameterService;

    private static QuartzUtil quartzUtil;

    @PostConstruct
    public void init(){
        quartzUtil = this;
    }

    public void synchronizeData(){

        //获取当前用户选择的同步时间
        Parameter parameter = quartzUtil.parameterService.findParameter();
    }
}
经验分享 程序员 微信小程序 职场和发展