Springboot3学习之自动配置

Spring Boot 3 继承了 Spring Boot 2 的许多特性,并进行了进一步的改进和优化。以下是关于 Spring Boot 3 自动装配原理的详细说明,涉及到的每一个注解和配置文件:

1. 核心注解

@SpringBootApplication

这个注解是一个组合注解,包含了以下几个注解:

5.3 自动配置过程

在应用启动时,EnableAutoConfigurationImportSelector 会从类路径下的 META-INF/spring.factories 文件中读取所有的自动配置类,并将其加载到应用上下文中。

spring.factories 示例:

  • @SpringBootConfiguration:一个特殊的 @Configuration,标记这是一个 Spring Boot 配置类。
  • @EnableAutoConfiguration:启用 Spring Boot 的自动配置机制。
  • @ComponentScan:自动扫描当前包及其子包中的所有 @Component@Service@Repository@Controller 注解的类,并注册为 Spring Bean。
  • @SpringBootApplication
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    

    2. 自动配置类

    Spring Boot 提供了大量的自动配置类,这些类通常以 AutoConfiguration 结尾,例如 JpaRepositoriesAutoConfigurationWebMvcAutoConfiguration 等。这些类的主要作用是根据类路径中的依赖和应用的配置自动配置 Spring Bean。

    自动配置类示例

    DataSourceAutoConfiguration 为例,这是一个自动配置数据源的类:

    @Configuration(proxyBeanMethods = false)
    @EnableConfigurationProperties(DataSourceProperties.class)
    @ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
    @Conditional(EmbeddedDatabaseCondition.class)
    @Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class, DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.Generic.class })
    public class DataSourceAutoConfiguration {
        // Configuration code
    }
    

    3. 条件注解

    Spring Boot 使用了一系列的条件注解来决定是否应用某个自动配置类或 Bean:

  • @Conditional:根据自定义的条件来判断是否实例化一个 Bean。
  • @ConditionalOnClass:当类路径中存在指定的类时,才会实例化一个 Bean。
  • @ConditionalOnMissingClass:当类路径中不存在指定的类时,才会实例化一个 Bean。
  • @ConditionalOnBean:当容器中存在指定的 Bean 时,才会实例化一个 Bean。
  • @ConditionalOnMissingBean:当容器中不存在指定的 Bean 时,才会实例化一个 Bean。
  • @ConditionalOnProperty:当指定的属性有特定值时,才会实例化一个 Bean。
  • @ConditionalOnResource:当类路径中存在指定的资源时,才会实例化一个 Bean。
  • @ConditionalOnWebApplication:当当前应用是 Web 应用时,才会实例化一个 Bean。
  • @ConditionalOnNotWebApplication:当当前应用不是 Web 应用时,才会实例化一个 Bean。
  • 4. 配置文件

    Spring Boot 的默认配置文件是 application.propertiesapplication.yml。这些文件用于配置应用程序的各种属性,例如数据库连接、端口号、日志级别等。

    配置文件示例

  • spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=root
    spring.datasource.password=secret
    

    5. 启动过程

    5.1 主类

    在 Spring Boot 应用的主类上使用 @SpringBootApplication 注解

  • @SpringBootApplication
    public class MyApplication {
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    

    5.2 SpringApplication.run()

    当你调用 SpringApplication.run() 时,Spring Boot 会启动一个内嵌的 Spring 应用上下文,并执行以下步骤:

  • 启动内嵌的应用上下文
  • 扫描和注册所有的 Spring Bean,包括自动配置类。
  • 应用所有的自动配置类,根据条件注解决定哪些配置需要应用。
  • 启动嵌入的服务器(如果是 Web 应用)。
  • 应用程序就绪,开始接收请求或执行任务。
  • org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
    org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
    org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
    ...
    

    每个自动配置类根据其条件注解决定是否生效。例如,DataSourceAutoConfiguration 会检查类路径中是否有数据源相关的类,并根据属性配置创建并注入数据源 Bean。

  • 5.3 自动配置过程

    在应用启动时,EnableAutoConfigurationImportSelector 会从类路径下的 META-INF/spring.factories 文件中读取所有的自动配置类,并将其加载到应用上下文中。

    spring.factories 示例:

  • org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
    org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
    org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
    ...
    

    6. Spring Boot 3 的改进和新特性

    6.1 模块化配置

    Spring Boot 3 更加注重模块化配置,通过使用新的配置属性和条件注解,开发者可以更灵活地控制应用的自动配置行为。

    6.2 支持 Java 17

    Spring Boot 3 支持最新的 Java 17 特性和改进,包括新的语法、性能优化和安全增强。

    6.3 增强的 GraalVM 支持

    Spring Boot 3 增强了对 GraalVM 的支持,使得应用程序可以更容易地编译为原生镜像,从而提高启动速度和运行效率。

    6.4 新的依赖管理

    Spring Boot 3 更新了依赖管理,支持最新版本的 Spring 框架和其他关键依赖项,确保应用程序的安全性和性能。

    总结

    Spring Boot 3 的自动装配通过扫描类路径、读取配置文件、应用条件注解等方式,自动配置所需的 Bean,使得开发者无需手动配置复杂的依赖和 Bean,从而大大简化了应用的开发和配置过程。这个过程涉及多个核心注解、自动配置类、条件注解以及配置文件的配合,确保了应用能够根据实际需求和环境自动调整和优化。Spring Boot 3 还引入了许多新特性和改进,进一步提升了开发体验和应用性能。

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值