spring注入为null原因及解决方案

解决方法用到@PostConstruct注解,平常没接触过,写博客记录一下。

场景

在使用Aviator时需要自定义函数,但是在使用自定函数的时候发现@Resource注入的类是null,使用的框架是springboot所以没什么好配置的,在网上找了下原因,找到其中一个“在spring中如果使用new创建一个对象时,这个对象将不在受spring管理器管理”的博客,所以检查了下自己是否使用new方式管理bean。
经检查找出原因
spring注入为null原因及解决方案_第1张图片
在项目启动时我用了静态块用new方式管理了bean。
但是使用静态块必须使用静态变量,而spring无法注入静态变量(有方法可以实现,但是比较麻烦)。

解决方法

将静态块改造成方法,并且使用注入方式传入对象,然后使用@PostConstruct注解,在将在依赖注入完成后,自动执行被注解的方法,这样就达到了启动项目注册函数的效果。
spring注入为null原因及解决方案_第2张图片
@PostConstruct:
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。

参考资料

https://cloud.tencent.com/developer/article/1371264
比较了构造器、@PostConstruct、@Autowired的加载顺序
https://www.jianshu.com/p/98cf7d8b9ec3
@PostConstruct和@PreDestroy的详细解析

你可能感兴趣的:(spring)