原文链接
原因:Service注入失败
一、保证util类当前所在的包在springmvc配置的扫描路径下
二、操作
在工具类上加上@Component注解
使用@PostConstruct注解静态化当前工具类
调用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 Oauth2LoginUtils {
@Resource
private UserMapper userMapper;
@Resource
private TokenUtils tokenUtils;
private static Oauth2LoginUtils oauth2LoginUtils;
@PostConstruct
public void init(){
oauth2LoginUtils = this;
}
/**
* 通过第三方进行登录后,注册用户信息
* @param loginUserVo
* @return
*/
public LoginUserVo checkOauth2Login(LoginUserVo loginUserVo){
String userAccount = loginUserVo.getUserAccount();
String name = loginUserVo.getUserName();
String userAvatar = loginUserVo.getUserAvatar();
User user = oauth2LoginUtils.userMapper.selectOne(new QueryWrapper<User>().eq("userAccount", userAccount));
}