Springframework-ioc学习(三)之最后修改BeanDefinition的机会

举报
西魏陶渊明 发表于 2022/09/25 03:56:04 2022/09/25
【摘要】 **在本系列的第一篇文章中我们已经把xml转换成了document对象在第二篇中我们又把document转换成了BeanDefinition。 其实BeanDefinition就是xml配置文件在J...

**在本系列的第一篇文章中我们已经把xml转换成了document对象在第二篇中我们又把document转换成了BeanDefinition。
其实BeanDefinition就是xml配置文件在Java中的另一种表现形式。我们对BeanDefinition的修改最终会影响到Bean的生成。**

Spring不允许开发者在对BeanDefinition进行扩展吗?答案当时是No!

文章目录

  1. Spring是如何把BeanDefinition保存起来的

  2. 如何对BeanDefinition做修改?


1.Spring是如何把BeanDefinition保存起来的

  1. BeanDefinition的保存其实非常简单就是保存在BeanFactory的实现类DefaultListableBeanFactory中用一个map来保存的,而实际注册是BeanDefinitionRegistry来完成的,而其实实现也是DefaultListableBeanFactory来完成的,他们的类关系是这样的


其调用流程也比较简单,大家可以根据下面这个调用流程图来看源码,源码关于这点还是非常简单的

2. 如何对BeanDefinition做修改?

前面xml->document->BeanDefinition的步骤都是在obtainFreshBanFactory中完成的,而Spring也给我们开发者提供了

对BeanDefinition做最后修改的机会。由此我们引出一个Spring命名的套路,所以PostProcessor结尾的类,其实都是Spring提供给我们供切入的点。Spring会加载我们的处理逻辑去处理。

修改BeanDefinition,spring 给我们提供了两个类

BeanFactoryPostProcessor,BeanDefinitionRegistryPostProcessor,只要我们实现这两个接口的方法,即可对BeanDefinition进行最后的修改

我们定义一个Bean.默认名字为checkCustomerClosed

看配置文件我们并没有设置销毁方法,另外test我们的默认值是下面这个


实现接口


看下测试


在第一次机会时候我们设置了销毁方法,在第二次修改机会我们设置了test的默认值,根据打印的日志

我们的两次修改都是成功的。

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/81448115

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。