前言
好久没写博客了,不知不觉大学已经过去两年了。 时光快似箭,光阴似如梭, 小学时的打油诗, 逃:)
话说回来,今天在写一个工具类,里面用了@Autowired
注入了TokenRepository
以及TokenService
时,在TokenRepository
的findFirstById()
方法一直报 java.lang.nullpointerexception
异常,一开始以为是传进去的id有问题,后来调试发现穿进去的id是有数据的,一抬头看到 tokenRepository
为null, !!!∑(゚Д゚ノ)ノ 什么鬼!
可能的原因: 网上百度了很久,原因可能在于我的utils包的类和controller的类不是同一个上下文。
解决办法
通过添加以下三个关键的地方,可以解决该问题
关于@PostConstruct:被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。
/**
* Created by huangzhenyang on 2017/11/2.
* Token 工具类
*/
@Component // 关键1,将该工具类注册为组件, 加粗!!!
public class TokenUtil {
@Autowired
private TokenRepository tokenRepository;
@Autowired
private TokenService tokenService;
private static SimpleDateFormat df =
new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
private int dueTime = 86400000;
public static TokenUtil tokenUtil; // 关键2
public TokenUtil() {
}
// 关键3
@PostConstruct
public void init() {
tokenUtil = this;
tokenUtil.tokenRepository = this.tokenRepository;
}
………………
这样一来,就能在TokenUtils
工具类中,通过tokenUtil.tokenRepository
来调用相关的spring data jpa的函数:
可以看到这样改完以后,tokenUtil.tokenRepository
不是null
写在后面
感觉对spring boot 还有好多不懂的,学的也不是太深入;最近由于时间紧就只能浅尝辄止了= = 日后填坑