聚焦IOC容器刷新环节postProcessBeanFactory(BeanFactory后置处理)专项

2025-04-29 0 795

目录

一、IOC容器的刷新环节快速回顾

二、postProcessBeanFactory源码展示分析

(一)模版方法postProcessBeanFactory

(二)AnnotationConfigServletWebServerApplicationContext

调用父类的 postProcessBeanFactory

包扫描

注解类注册

(三)postProcessBeanFactory 主要功能

三、调用父类方法以继承基础设置和逻辑

(一)重要任务回顾

(二)注册 WebApplicationContextServletContextAwareProcessor

(三)忽略 ServletContextAware 接口的依赖

(四)注册 Web 应用程序范围

ExistingWebApplicationScopes 的角色

注册 Web 应用程序作用域

四、执行包扫描

五、注解类注册

(一)扫描和注册注解类的过程步骤

扫描注解类

创建 BeanDefinition

注册 BeanDefinition

(二)对注解类注册的理解新思路

新的思路

六、总结


干货分享,感谢您的阅读!

在很早之前我们单独写过一篇文章《分析SpringBoot启动配置原理》,具体可见:

分析SpringBoot启动配置原理_spring启动加载顺序及原理-CSDN博客文章浏览阅读1.6w次,点赞15次,收藏43次。分析SpringBoot启动配置原理:给出整体初步分析和对应流程图,并从三方面进行展开分析(SpringApplication构造过程分析+SpringApplication启动过程分析+SpringBoot自动配置分析)_spring启动加载顺序及原理https://blog.csdn.net/xiaofeng10330111/article/details/130903779?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171829487016800213028572%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171829487016800213028572&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-130903779-null-null.nonecase&utm_term=%E5%88%86%E6%9E%90SpringBoot%E5%90%AF%E5%8A%A8%E9%85%8D%E7%BD%AE%E5%8E%9F%E7%90%86&spm=1018.2226.3001.4450其中IOC容器的刷新环节可当重点分析,值得在读源码时进行深入分析,我们会从多个方向上再次进行分析回顾和学习。历史其他专项展示:

具体内容 具体链接
探究Spring BeanFactory 重看Spring聚焦BeanFactory分析_java beanfactory 实现类-CSDN博客
探究Spring ApplicationContext 重看Spring聚焦ApplicationContext分析_applicationcontext消息资源处理-CSDN博客
ApplicationContext vs BeanFactory 解锁ApplicationContext vs BeanFactory: 谁更具选择性?-CSDN博客
探究Spring Environment 重看Spring聚焦Environment分析-CSDN博客
探究Spring BeanDefintion 重看Spring聚焦BeanDefinition分析和构造-CSDN博客
对焦后置处理器 聚焦Spring后置处理器分析对比_spring的后置处理器分析-CSDN博客
BeanFactory – obtainFreshBeanFactory专项 聚焦IOC容器刷新环节obtainFreshBeanFactory初始化BeanFactory专项_refreshbeanfactory-CSDN博客
prepareBeanFactory专项 聚焦IOC容器刷新环节prepareBeanFactory专项-CSDN博客

一、IOC容器的刷新环节快速回顾

我们将AbstractApplicationContext的refresh方法源码提取并进行重点代码标注说明如下:

public abstract class AbstractApplicationContext implements ApplicationContext {

    @Override
    public void refresh() throws BeansException, IllegalStateException {
        synchronized (this.startupShutdownMonitor) {
            // 准备上下文环境,包括初始化工厂、后置处理器等
            prepareRefresh();

            // 创建并初始化 BeanFactory
            ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();

            // 设置 BeanFactory 的类加载器、资源加载器等
            prepareBeanFactory(beanFactory);

            try {
                // 允许子类对 BeanFactory 进行进一步的自定义处理
                postProcessBeanFactory(beanFactory);

                // 调用 BeanFactoryPostProcessors 进行后置处理
                invokeBeanFactoryPostProcessors(beanFactory);

                // 注册 BeanPostProcessors,用于对 Bean 实例进行后置处理
                registerBeanPostProcessors(beanFactory);

                // 初始化消息源
                initMessageSource();

                // 初始化事件广播器
                initApplicationEventMulticaster();

                // 初始化其他特殊 Bean
                onRefresh();

                // 注册关闭钩子
                registerListeners();

                // 初始化所有剩余的单例 Bean
                finishBeanFactoryInitialization(beanFactory);

                // 完成上下文刷新
                finishRefresh();
            } catch (BeansException ex) {
                if (logger.isWarnEnabled()) {
                    logger.warn(\"Exception encountered during context initialization - \" +
                            \"cancelling refresh attempt: \" + ex);
                }
                // 销毁已创建的 Bean,关闭容器
                destroyBeans();
                // 重置容器刷新标志,允许再次刷新
                cancelRefresh(ex);
                // 把异常重新抛出,允许调用者

平台声明:以上文章转载于《CSDN》,文章全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,仅作参考。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/xiaofeng10330111/article/details/140916579

遇见资源网 JAVA 聚焦IOC容器刷新环节postProcessBeanFactory(BeanFactory后置处理)专项 http://www.ox520.com/157876.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务