账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Spring源码关于PostProcessorRegistrationDelegate的问题?
    48
    0

    Spring源码关于PostProcessorRegistrationDelegate的问题?

    Spring4.0以上版本中关于

    PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors()

    的一个疑问:

    在该方法中,我们可以看到,其多次调用了下面的方法:

    postProcessorNames = beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor.class, true, false)
    

    甚至还在循环中调用了该方法:

    while (reiterate) {
                    reiterate = false;
                    postProcessorNames = beanFactory.getBeanNamesForType(BeanDefinitionRegistryPostProcessor.class, true, false);
                    for (String ppName : postProcessorNames) {
                        if (!processedBeans.contains(ppName)) {
                            currentRegistryProcessors.add(beanFactory.getBean(ppName, BeanDefinitionRegistryPostProcessor.class));
                            processedBeans.add(ppName);
                            reiterate = true;
                        }
                    }
                    sortPostProcessors(currentRegistryProcessors, beanFactory);
                    registryProcessors.addAll(currentRegistryProcessors);
                    invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry);
                    currentRegistryProcessors.clear();
                }

    我的猜想是可能在调用

    postProcessor.postProcessBeanDefinitionRegistry(registry);

    方法时,会导致beanFactory中相关的bean定义发生变化,故调用了多次,不知道大家时怎么理解的,想请教大家,谢谢。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 清风拂墨1 普通会员 1楼

      Spring源码中并没有直接明确定义PostProcessorRegistrationDelegate的实现。然而,我们可以通过分析org.springframework.context.ApplicationContextpostProcessAfterPropertiesSet()方法来推测PostProcessorRegistrationDelegate可能的实现。

      postProcessAfterPropertiesSet()方法中,Spring会首先调用preProcessAfterPropertiesSet()方法,然后再调用postProcessAfterPropertiesSet()方法。preProcessAfterPropertiesSet()方法主要负责处理一些基础的配置,如清理缓存、初始化依赖关系等。而postProcessAfterPropertiesSet()方法主要负责处理处理后的bean实例。

      因此,我们可以推测PostProcessorRegistrationDelegate可能是一个回调接口,用于处理处理后的bean实例。具体实现可能会根据preProcessAfterPropertiesSet()方法的处理结果而有所不同。

      另外,Spring源码中并没有直接定义PostProcessorRegistrationDelegate的使用方式,所以我们需要通过测试和使用经验来进一步确定它的具体实现。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部