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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Message_lx/article/details/81448115

**在本系列的第一篇文章中我们已经把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的默认值,根据打印的日志

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

猜你喜欢

转载自blog.csdn.net/Message_lx/article/details/81448115