基于spring注入为null的原因及解决方案
spring注入为null
解决方法用到@PostConstruct注解,平常没接触过,写博客记录一下。
场景
在使用Aviator时需要自定义函数,但是在使用自定函数的时候发现@Resource注入的类是null,使用的框架是springboot所以没什么好配置的,在网上找了下原因,找到其中一个“在spring中如果使用new创建一个对象时,这个对象将不在受spring管理器管理”的博客,所以检查了下自己是否使用new方式管理bean。
经检查找出原因

在项目启动时我用了静态块用new方式管理了bean。
但是使用静态块必须使用静态变量,而spring无法注入静态变量(有方法可以实现,但是比较麻烦)。
解决方法
将静态块改造成方法,并且使用注入方式传入对象,然后使用@PostConstruct注解,在将在依赖注入完成后,自动执行被注解的方法,这样就达到了启动项目注册函数的效果。

@PostConstruct:
被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
Spring注入的属性为null可能的情况
Spring注入的属性为null可能的情况,使用注解方式。
保证Bean能够交付给Spring容器
1、你的组件上面是否加入了合适的注解。例如:@Service, @Component等。
2、检查一下你context-scan扫描器配置的路径是否正确。(SpringBoot检查一下你的包是否和主入口程序在一个目录下,并且检@ComponentScan配置的路径是否正确)
检查实例化的方式
1、很低级问题,但是一不注意就犯了。检查是不是new了一个对象,这样的话就绕过了容器的依赖注入过程,也可能出现获取不到应有的属性这种情况。
说明:Spring是一个bean的容器,由容器负责对象的初始化和依赖注入。当我们想要从中获取一个Bean的实例时,就从Spring容器中获取。
检查注入的位置
1、把@Autowired注解加在了一个静态属性上,注入为空。
说明:Spring帮我们做属性的自动注入,是在帮助我们实例化Bean之后完成的。而static修饰该属性是归属于类而不是实例的。当Spring我们想给static属性注入值的时候,对象还没创建,这种情况一定会出现注入为空的情况。
2、在应用的Filter或Listener中使用了@Autowired ,注入为空web容器启动是按照一定顺序的,即:Listener --> Filter -->Servlet。
因为Filter和Listener加载顺序优先于spring容器初始化实例,所以会出现null。Spring的入口就在Servlet里。可以用ApplicationContext根据bean名称(注意名称为实现类而不是接口)去获取bean
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
浅谈spring-boot的单元测试中,@Before不被执行的原因
这篇文章主要介绍了浅谈spring-boot的单元测试中,@Before不被执行的原因,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-04-04
springboot使用com.github.binarywang包实现微信网页上的支付和退款
最近做项目需要实现在pc端需要实现微信的支付,本文主要介绍了springboot使用com.github.binarywang包实现微信网页上的支付和退款,具有一定的参考价值,感兴趣的可以了解一下2024-05-05
Springboot项目出现java.lang.ArrayStoreException的异常分析
这篇文章介绍了Springboot项目出现java.lang.ArrayStoreException的异常分析,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-12-12
Java Timezone类常见问题_动力节点Java学院整理
这篇文章主要介绍了Java Timezone类常见问题的相关资料,需要的朋友可以参考下2017-05-05
java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解
这篇文章主要介绍了java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解,需要的朋友可以参考下2020-02-02
最新IntelliJ IDEA 2021版配置 Tomcat 8.5 的详细步骤
idea开发工具一直是java环境最好用,很受广大开发者喜爱,今天通过本文给大家分享最新IntelliJ IDEA 2021版配置 Tomcat 8.5 的详细步骤,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下2021-06-06


最新评论