Springframework-ioc学习(三)之最后修改BeanDefinition的机会
【摘要】
**在本系列的第一篇文章中我们已经把xml转换成了document对象在第二篇中我们又把document转换成了BeanDefinition。 其实BeanDefinition就是xml配置文件在J...
**在本系列的第一篇文章中我们已经把xml转换成了document对象在第二篇中我们又把document转换成了BeanDefinition。
其实BeanDefinition就是xml配置文件在Java中的另一种表现形式。我们对BeanDefinition的修改最终会影响到Bean的生成。**
Spring不允许开发者在对BeanDefinition进行扩展吗?答案当时是No!
文章目录
Spring是如何把BeanDefinition保存起来的
如何对BeanDefinition做修改?
1.Spring是如何把BeanDefinition保存起来的
- 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)