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