java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot注解生效原理

SpringBoot注解生效原理全解析

作者:许苑向上

Spring Boot注解自动生效依赖于Spring容器和处理机制,通过扫描、解析配置类生成BeanDefinition,再由容器实例化,实现@Autowired等注解的自动注入与组件注册,本文给大家介绍SpringBoot注解生效原理分析,感兴趣的朋友一起看看吧

Spring Boot 注解生效原理分析

Spring Boot 的注解**(如 @RestController、@Service、@Autowired、@Configuration 等)在开发中使用非常广泛,但它们为什么能“自动生效”?**本文将深入解析其背后的原理。

Spring 注解的生效依赖于 Spring 容器(ApplicationContext) 和 注解处理器(BeanPostProcessor / ConfigurationClassPostProcessor 等)。

前置:Bean 的声明与注册

@Component、@Service、@Controller、@Repository 等注解,都是用于标记一个类为 Spring 管理的 Bean。

生效机制

1、 @Configuration@Component@ComponentScan 生效原因如下:
Spring 在启动时,进行上下文刷新refreshContex()然后触发ConfigurationClassPostProcessor扫描所有 @Configuration@Component等类注册成BeanDefination, @ComponentScan 触发包扫描,找到其他 @Component/@Service/@Controller将其也注册成 BeanDefination。

2、自动注入 @Autowired 实现机制:
@Autowired 的生效依赖:依赖注入(DI)机制 和 后置处理器(BeanPostProcessor)。
关键类:
AutowiredAnnotationBeanPostProcessor 处理 @Autowired 注解。
处理流程:

  1. AutowiredAnnotationBeanPostProcessor负责扫描所有 Bean 中的 @Autowired 注解,决定注入哪一个 Bean。
  2. DependencyDescriptor描述依赖关系,包括类型、是否必需、泛型等。
  3. BeanFactory提供 Bean 实例,用于实际注入。

1. 启动入口

2.refresh()关键步骤

AbstractApplicationContext#refresh() 中有一行核心逻辑:

invokeBeanFactoryPostProcessors(beanFactory);

这里会执行所有 BeanFactoryPostProcessor,其中最重要的是:
👉 ConfigurationClassPostProcessor

3.ConfigurationClassPostProcessor的作用

源码示例图:

它是专门为配置类服务的后处理器,主要任务:

  1. 扫描所有 @Configuration 类。
  2. 通过postProcessBeanDefinitionRegistry()触发配置类的扫描和解析
  3. 交给 ConfigurationClassParser 解析成配置模型。
  4. 交给 ConfigurationClassBeanDefinitionReader 转换成 BeanDefinition 并注册到容器。

4.ConfigurationClassParser的职责

ConfigurationClassPostProcessor 检测到配置类时,就会调用 ConfigurationClassParser 解析。

注意:它不是直接生成 BeanDefinition
它的作用是:

👉 它相当于 语法分析器,把配置类源信息转成中间表示。

5.ConfigurationClassBeanDefinitionReader的职责

👉 它相当于 代码生成器,把中间表示落地成可用的 Bean 定义。

6. 整体链路总结

  1. SpringApplication.run() → 创建 ApplicationContext
  2. refresh() → 执行 invokeBeanFactoryPostProcessors()
  3. ConfigurationClassPostProcessor 介入。
  4. ConfigurationClassParser 解析配置类 → 生成 ConfigurationClass 模型。
  5. ConfigurationClassBeanDefinitionReader 将模型转化为 BeanDefinition
  6. BeanDefinitionRegistry 注册所有 生成的BeanDefinition。
  7. 容器实例化 → Bean 生效。

📌 核心记忆

核心流程图总结

refresh()
    ↓   // 容器核心刷新流程入口
invokeBeanFactoryPostProcessors()
    ↓   // 执行 BeanFactoryPostProcessor,增强 BeanFactory
ConfigurationClassPostProcessor
    ↓   // 识别并处理 @Configuration、@ComponentScan、@Import 等配置类
ConfigurationClassParser
    ↓   // 解析配置类注解,生成 ConfigurationClass 模型(中间表示)
ConfigurationClassBeanDefinitionReader
    ↓   // 将 ConfigurationClass 转换为 BeanDefinition
BeanDefinitionRegistry(注册 BeanDefinition)
    ↓   // 将 BeanDefinition 注册到 IOC 容器
IOC 容器实例化 Bean
    ↓   // 根据 BeanDefinition 实例化对象,完成依赖注入并放入单例池

到此这篇关于SpringBoot注解生效原理全解析的文章就介绍到这了,更多相关SpringBoot注解生效原理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文