SpringBoot 配置类解析

全局流程解析

配置类解析入口

postProcessBeanDefinitionRegistry逻辑

processConfigBeanDefinitions逻辑

执行逻辑解析

执行入口

ConfigurationClassPostProcessor.processConfigBeanDefinitions()方法中的do while循环体中

循环体逻辑

parse方法调用链

doProcessConfigurationClass

  • 处理内部类
  • 处理PropertySource注解
  • ComponentScan指定的路径进行扫描
  • 处理Import注解
  • 处理ImportResource
  • 转换bean的方法BeanMethod
  • 处理接口的默认方法
  • 处理父类

核心方法解析

内部类处理

org.springframework.context.annotation.ConfigurationClassParser#processMemberClasses

PropertySource处理

org.springframework.context.annotation.ConfigurationClassParser#processPropertySource

  • 用法:@PropertySource({"demo.properties"})
  • 遍历指定路径,替换占位符,加载资源
  • 将资源添加到environment

ComponentScan处理

  • @ComponentScan(basePackages = ({"pkgA","pkgB"}), basePackageClasses = ({A.class, B.class})
  • 没设置扫描路径的话使用配置类所在路径
  • 过滤顺序: excludeFilters -> includeFilters -> false

Import处理

  • ImportSelector.class & DeferredImportSelector.class
  • 处理以上两个接口实现selectImports返回的类名数组
  • DeferredImportSelector接口调用优先级低于其他接口
  • 处理ImportBeanDefinitionRegistrar实现中注册的bean
  • 处理@Import(A.class)

ImportResource处理

  • @ImportResource("xyz.xml")
  • 将注解属性值放入importedResources
  • 后续loadBeanDefinitionsForConfigurationClass中加载定义的bean

BeanMethod处理

  • 构造BeanMethod对象放入配置类属性中后续处理

接口默认方法处理

父类处理

  • 一: 不为null
  • 二: 全路径名不以java开头
  • 三: 尚末处理过

面试题

  • 配置类是什么?起到什么作用?
  • 请举例一些常用的配置注解?
  • 介绍下SpringBoot框架对配置类的一个处理流程?
  • 你能说出其中它其中的一些关键类和方法么?
  • 配置类的处理一般包括哪些内容?
  • 详细的一些注解处理过程?如Import注解?

相关推荐

  1. SpringBoot-SpringBoot自动配置底层源码

    2024-01-28 09:02:03       32 阅读
  2. SpringBoot 源码

    2024-01-28 09:02:03       43 阅读
  3. springboot请求参数

    2024-01-28 09:02:03       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-28 09:02:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-28 09:02:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-28 09:02:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-28 09:02:03       20 阅读

热门阅读

  1. 在Vue的模块开发中使用GPT的体验及总结

    2024-01-28 09:02:03       32 阅读
  2. STM32 简易智能家居嵌入式系统设计蓝图

    2024-01-28 09:02:03       28 阅读
  3. 2-1.分支结构之switch语句

    2024-01-28 09:02:03       31 阅读
  4. day34_js

    day34_js

    2024-01-28 09:02:03      28 阅读
  5. CSS transition(过渡效果)详解

    2024-01-28 09:02:03       29 阅读
  6. CCF-CSP 202312-2 因子化简

    2024-01-28 09:02:03       31 阅读
  7. sql server 2008 安装问题

    2024-01-28 09:02:03       29 阅读
  8. DAY32:贪心算法part2、122\55\45

    2024-01-28 09:02:03       40 阅读
  9. kafka-JVM采集器安装

    2024-01-28 09:02:03       35 阅读