Bean背后的魔法:揭秘Spring配置Bean的实现原理

简介: Bean背后的魔法:揭秘Spring配置Bean的实现原理


Spring 的 @Configuration 注解是用于标记一个类为配置类的注解。它告诉 Spring 容器这个类是用来定义 bean 的配置类,Spring 在启动时会扫描带有 @Configuration 注解的类,并根据其中的配置信息创建和管理相应的 bean。

@Configuration 注解的底层实现原理主要涉及两个关键的组件:ConfigurationClassPostProcessorConfigurationClassParser

  1. ConfigurationClassPostProcessor:这是一个 Bean 后置处理器,负责处理带有 @Configuration 注解的类。在 Spring 容器启动时,ConfigurationClassPostProcessor 会扫描并解析带有 @Configuration 注解的类,将其中的配置信息转换为 BeanDefinition 对象,然后注册到 Spring 容器中。
  2. ConfigurationClassParser:这是一个配置类解析器,负责解析带有 @Configuration 注解的类。它会分析配置类中的方法和字段,识别出其中的 bean 定义、依赖关系、切面等信息,并将其转换为对应的 BeanDefinition 对象。ConfigurationClassParser 还支持处理 @Import@ImportResource@ComponentScan 等注解,以支持更复杂的配置场景。

通过以上的底层组件协同工作,Spring 能够正确解析和处理带有 @Configuration 注解的类,将其中的配置信息转换为可管理的 bean,并将其注册到 Spring 容器中。这样,我们就可以使用 @Configuration 注解来定义和组织应用程序的配置,实现依赖注入、AOP、事务管理等功能。

在 Spring 中,@Configuration 注解标记的配置类在创建 Bean 时使用的是 CGLIB(Code Generation Library)动态代理技术。

CGLIB 是一个基于字节码生成的开源库,它通过生成目标类的子类来实现动态代理。当 Spring 容器扫描到带有 @Configuration 注解的类时,会使用 CGLIB 动态代理来创建该配置类的代理对象。这个代理对象会拦截对配置类中的方法的调用,并根据方法上的注解信息来决定是否需要创建相应的 Bean。

具体而言,当使用 @Configuration 注解标记的类被 Spring 容器扫描到后,Spring 会使用 Enhancer 类创建一个目标类的子类。这个子类继承了目标类的所有方法,并重写了其中带有 @Bean 注解的方法。在重写的方法中,Spring 会通过调用父类的方法来获取 Bean 实例,并根据方法上的注解信息进行相应的处理,例如单例、原型等。然后,Spring 将这些生成的子类作为真正的 Bean 定义注册到容器中。

使用 CGLIB 动态代理的好处是,它能够在运行时动态地生成代理类,并且不需要目标类实现任何接口。这使得 @Configuration 注解的配置类可以更加灵活地定义和管理 Bean,而不受接口限制。

需要注意的是,当一个配置类中的方法被其他方法调用时,CGLIB 动态代理会保证被调用的方法的代理逻辑也能正常执行。这样,Spring 能够正确地处理配置类中的依赖关系,并按照正确的顺序创建和初始化 Bean。



相关文章
|
7天前
|
存储 Java 数据安全/隐私保护
|
2天前
|
消息中间件 安全 Java
在Spring Bean中,如何通过Java配置类定义Bean?
【4月更文挑战第30天】在Spring Bean中,如何通过Java配置类定义Bean?
9 1
|
4天前
|
Java 开发者 Spring
Spring Boot中的资源文件属性配置
【4月更文挑战第28天】在Spring Boot应用程序中,配置文件是管理应用程序行为的重要组成部分。资源文件属性配置允许开发者在不重新编译代码的情况下,对应用程序进行灵活地配置和调整。本篇博客将介绍Spring Boot中资源文件属性配置的基本概念,并通过实际示例展示如何利用这一功能。
14 1
|
13天前
|
存储 安全 Java
第2章 Spring Security 的环境设置与基础配置(2024 最新版)(下)
第2章 Spring Security 的环境设置与基础配置(2024 最新版)(下)
20 0
|
13天前
|
安全 Java 数据库
第2章 Spring Security 的环境设置与基础配置(2024 最新版)(上)
第2章 Spring Security 的环境设置与基础配置(2024 最新版)
40 0
|
14天前
|
XML Java 数据库
在Spring框架中,XML配置事务
在Spring框架中,XML配置事务
|
14天前
|
Java Windows Spring
Spring Boot 3.x 全新的热部署配置方式(IntelliJ IDEA 2023.1)
Spring Boot 3.x 全新的热部署配置方式(IntelliJ IDEA 2023.1)
18 1
|
14天前
|
安全 Java Spring
Spring Security 5.7 最新配置细节(直接就能用),WebSecurityConfigurerAdapter 已废弃
Spring Security 5.7 最新配置细节(直接就能用),WebSecurityConfigurerAdapter 已废弃
32 0
|
14天前
|
安全 Java 应用服务中间件
江帅帅:Spring Boot 底层级探索系列 03 - 简单配置
江帅帅:Spring Boot 底层级探索系列 03 - 简单配置
28 0
江帅帅:Spring Boot 底层级探索系列 03 - 简单配置
|
14天前
|
机器学习/深度学习 运维 Java
江帅帅:Spring Boot 底层级探索系列 02 - 自动配置的底层逻辑
江帅帅:Spring Boot 底层级探索系列 02 - 自动配置的底层逻辑
20 0