美文网首页
Spring源码学习⑪-扩展原理BeanFactoryPostP

Spring源码学习⑪-扩展原理BeanFactoryPostP

作者: 曾慧婷 | 来源:发表于2019-05-19 19:32 被阅读0次

    1、BeanFactoryPostProcessor:BeanFactory的后置处理器

            BeanPostProcessor:Bean的后置处理器,是在bean创建对象初始化前后进行拦截工作用的。

            BeanFactoryPostProcessor:BeanFactory的后置处理器,在BeanFactory标准初始化之后调用,也就是在所有bean定义已经保存并加载到BeanFactory,但是bena实例尚未创建的时候。

            原理:

                    1)、IOC容器创建对象

                     2)、invokeBeanFactoryPostProcessors(beanFactory);执行BeanFactoryPostProcessor

                                这里通过分析两个问题来理解:

                                    1)、通过上面我们知道了,BeanFactoryPostProcessor是所有bean定义已经保存加载但实                                            例尚未创建时,那么我们自定义的MyBeanFacotyPostProcessor实例是什么时候创建,                                            然后在后面使用的呢?

                                        invokeBeanFactoryPostProcessors(beanFactory);

                                        =》

                                        invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry);

                                            在这个方法里面,利用ConfigurationClassPostProcessor注册并实例                                                                        化MyBeanFacotyPostProcessor的。

                                                ConfigurationClassPostProcessor:这个类是我们在使用@Configuration或                                                                者@ComponentScan("com.atguigu.ext")注解时自动注册实例化的,再或者我们在                                                  自定义BeanFactoryPostProcessor的时候进行注册实例化。可以用来实例                                                                化BeanFactoryPostProcessor。(目前自己知道的一个作用,应该还有其他作                                                        用,理解比较片面)

                                                该后置处理器的执行时机:在配置类中定义的任何一个方法的bean定义注册之后,                                                    任何BeanFactoryPostProcessor执行之前。

                                    2)、如何找到所有的BeanFactoryPostProcessor并执行其方法呢?

                                            =》

                                            String[] postProcessorNames =                                             beanFactory.getBeanNamesForType(BeanFactoryPostProcessor.class, true, false);

                                                因为有步骤1),所以我们执行到该处时,只要我们将自定的                                                                BeanFactoryPostProcessor注册到容器中,在这里就可以根据类型获取到。

                                                    1)、直接在BeanFactory中找到所有对象类型是BeanFactoryPostProcessor的                                                                    组件,并执行他们的方法。

                                                    2)、在初始化创建其他组件前面执行

    相关文章

      网友评论

          本文标题:Spring源码学习⑪-扩展原理BeanFactoryPostP

          本文链接:https://www.haomeiwen.com/subject/cmwqzqtx.html