Anaconda 比特微 Apache makefile mobile printing gwt Zeptojs Skeljs vue部署 vue网页 vue滑动事件 jquery的点击事件 jq获取最后一个子元素 查看rabbitmq版本 office配置进度 升级python版本 axure导出html文件 python实例 python随机函数 pythonassert函数 python创建txt文件并写入 python环境变量 java正则 javamysql java在线教程 java中的抽象类 javasocket通信 java面向对象 java获取本机ip java的特性 xp系统修复 groupby din字体 影视后期软件 键盘模拟器 网络是怎样连接的 js转int 免费家谱制作软件 什么软件买电影票便宜
当前位置: 首页 > 学习教程  > 编程语言

重温 - spring 源码 - ConfigurationClassPostProcessor

2020/12/28 18:41:30 文章标签:

概要:ConfigurationClassPostProcessor 是 spring 中极为重要的一个类尤其是在 springboot 广泛应用的背景下,ConfigurationClassPostProcessor 类 在spring 容器启动流程之初 收集 Configuration 注解的类以及 Component ComponentScan Import ImportRe…

      概要:ConfigurationClassPostProcessor 是 spring 中极为重要的一个类尤其是在 springboot 广泛应用的背景下,ConfigurationClassPostProcessor 类 在spring 容器启动流程之初 收集 @Configuration 注解的类以及 @Component @ComponentScan @Import @ImportResource 和 @Bean 将其封装成BeanDefinition 注册到spring registry中,以备后期的实例化。

     1. AnnotationConfigApplicationContext 构造函数中 三步走

       (1) this() 用于注册 两个类 AnnotatedBeanDefinitionReader ClassPathBeanDefinitionScanner

       (2)setConfig(location / configclass) 用于配置项目的基础扫描路径

       (3)refresh() 调用AbstractApplicationContext 的 refresh() 方法 改方法 就是spring和核心路程方法(spring的流程模板)

      AnnotatedBeanDefinitionReader 注册几个BeanRegistryPostProcessor ConfigurationClassPostProcessor / AutowiredAnnotationBeanPostProcessor / CommonAnnotationBeanPostProcessor

     以及事件等的一些类。

       invokeBeanFactoryPostProcessor(beanFactory)  ->  实例化 ConfigurationClassPostProcessor -> invokeBeanDefinitionRegistrPostProcessors()

       -> ConfigurationClassPostProcessor . postProcessBeanDefinitionRegistry . processConfigBeanDefinitions

        在processConfigBeanDefinitions()中 首先收集 上面描述的注解的类 装入集合遍历解析 引出 ConfigurationClassParser 类进行解析

      ConfigurationClassParser 解析 parse() 使用方法的递归进行循环的遍历

       @ComponentScan 注解定义的包类会被扫描后封装成BeanDefinition 注册到 BeanDifinitionRegistry 中待实例化。

       @PropertyResource 中的配置项 会被包装成 PropertyResource 添加到 Environment 的 MutablePropertySources 类型的变量中

       @Import 导入的类 ImportSelector(DeferredImportSelector) / ImportBeanDefinitionRegistrar 会被收集到 不同的容器中后面 beanDefinition的注册

       ImportSelector 接口 selectImports() 方法返回的是 String 类型的数组 String字符串必须是 类的全限定名 

      ImportBeanDefinitionRegistrar 提供了默认的方法给子类实现  registryBeanDefinitions (meta , registry) 实现BeanDefinition 增删改操作

@Bean 注解方法收集到 宿主类的 method的集合 

@ImportResource 等以及 当前配置类的 父类的扫描

收集完成后 ConfigurationClassBeanDefinitionRender 进行 beanDefinition 的封装和注册

(1)配置类本身注册

(2) @Bean 方法的注册

实现 通过factoryMethod 实现的,每一个@Bean 注册成一个 ConfigurationClassBeanDefinition类型的 BeanDefinition 通过设置改 BeanDefinition的 factoryMethod 和 factoryBeanName / BeanClassName 等属性来为后期 @Bean的实例化作准备。

 

 

 

 

      

 

    

       

       


本文链接: http://www.dtmao.cc/news_show_550081.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?