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;注入自动装配的依赖项失败

springmvc报错500

Spring实例化bean顺序问题,导致注入失败

SPRING01_概述配置文件bean实例化依赖注入的方式依赖注入的数据类型分模块开发API使用

SQL注入 | union all和union的区别以及用法