SpringBoot @Autowired注解在非Controller中其他层注入为null

前言

     最近在做学校的一卡通网站模拟登陆的时候,因为需要验证码,用了百度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

猜你喜欢

转载自blog.csdn.net/qiangrenpu8881/article/details/82146323
今日推荐