@Autowired自动装配对象为null的问题、原因及解决方法以及ApplicationContext的getBean()方法

当在Spring项目中遇到@Autowired注解的对象为null的情况,可能的原因包括:启动类位置不正确、未添加@Component等注解、手动new对象等。Spring管理的bean默认为单例,不应手动new。此外,静态变量无法使用@Autowired注入,因为静态方法不属于对象实例。解决方案包括调整启动类位置、添加注解、使用AutowireCapableBeanFactory或者通过getBean()方法获取。@PostConstruct注解可以在初始化时执行特定逻辑。
摘要由CSDN通过智能技术生成

问题缘由
在获取某个类的时候,遇到@Autowired自动注入的值为null的情况;
但通过ApplicationContext的getBean()方法就不会为空值;
参考:Spring进阶篇(2)-ApplicationContextAware(动态获取容器中Bean)

//为空值
@Autowired
RoleLevelResourceManager roleLevelResourceManager;
//不为空值
//Context是实现ApplicationContextAware接口获取ApplicationContext上下文对象,通过getBean的方式,获取到Spring容器的Bean
RoleLevelResourceManager roleLevelResourceManager = Context.getBean(RoleLevelResourceManager.class);

于是查阅资料,了解问题。
一般无法@Autowired无法注入的情况(只针对spring):

  1. spring boot项目启动类入口要尽量放在顶级包下,spring会自动扫描子包以及子孙包的bean,基本不会存在无法注入的情况。普通spring项目配置文件配置<context:component-scan base-package=“com.springmvc.test” />等。
  2. 由于spring帮我们管理bean,容器里面的bean默认是单例的,除非自行配置scope=prototype。
    所以不能自己去new,比如new xxxService(), 这个service对象是有的,但是里面注入的属性全部是null,spring不会给new出来的对象注入属性。
@Component(value=
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值