spring bean重复定义不报错以及注入失败分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring bean重复定义不报错以及注入失败分析相关的知识,希望对你有一定的参考价值。
参考技术A 定义了两个name为sellerSupportXconfReader的bean,但没有报错在registerBeanDefinition方法中:
GraySwitch中的sellerSupportXconfReader为null,但启动能成功
要搞清楚原因,必须先熟悉spring context加载的过程
在 invokeBeanFactoryPostProcessors 中会加载所有的 BeanFactoryPostProcessor 。
而Bean的属性填充在 AbstractAutowireCapableBeanFactory#populateBean 中实现
Autowired注解的属性是通过 AutowiredAnnotationBeanPostProcessor 注入的,依赖检查也是在这个类
而 BeanPostProcessor 是在 registerBeanPostProcessors 方法中初始化。
PropertySourcesPlaceholderConfigurer 恰好实现了 BeanFactoryPostProcessor ,所以会在 invokeBeanFactoryPostProcessors 这个阶段加载。而 PropertySourcesPlaceholderConfigurer 依赖 sellerSupportXconfReader ,后者又依赖 GraySwitch , GraySwitch 又通过 Autowired 依赖 sellerSupportXconfReader 。而此时 BeanPostProcessor 还没初始化,所以不会对 GraySwitch 赋值,容器也不会初始化失败。
把sellerSupportXconfReader定义移到其他类能解决这个问题。或者propertySourcesPlaceholderConfigurer去掉对sellerSupportXconfReader的依赖。
以上是关于spring bean重复定义不报错以及注入失败分析的主要内容,如果未能解决你的问题,请参考以下文章
IntelliJ IDEA Spring+Mybatis dao bean对象注入失败
Spring data jpa-未定义名为“entityManagerFactory”的bean;注入自动装配的依赖项失败