前言
最近在做学校的一卡通网站模拟登陆的时候,因为需要验证码,用了百度OCR的文字识别接口,方法教程在另一篇博客里面会说到,获取百度的Access_Token的时候有效期30天,需要保存到数据库中
注入了这个jpa操作数据库,发现居然空指针null
可能的原因: 网上查了一下,原因可能在于我的utils包的类和controller的类不是同一个上下文。
解决办法
通过添加以下三个关键的地方,可以解决该问题
关于@PostConstruct:被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Serclet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。
@Component
public class BaiDuOrc{
@Autowired
private AccessTokenOcrRepository accessTokenOcrRepository;
public static BaiDuOrc baiDuOrc ;
@PostConstruct //通过@PostConstruct实现初始化bean之前进行的操作
public void init() {
baiDuOrc = this;
baiDuOrc.accessTokenOcrRepository = this.accessTokenOcrRepository;
//初使化时将已静态化的accessTokenOcrRepository实例化
}
......
有三个地方需要注意一下:
1.@Component
2.public static BaiDuOrc baiDuOrc ; 注意这个为 public 不然没有权限
3.@PostConstruct public void init() {}
调用的时候
用 baiDuOrc.accessTokenOcrRepository.方法
这样子就可以完美解决非Controller中其他层注入为null