springboot 如何实现自动配置呢?
我们都知道SpringBoot自动配置可以使用开发java程序变的更简单,
那么SpringBoot中如何实现自动配置呢?下文笔者将一一道来,如下所示
那么SpringBoot中如何实现自动配置呢?下文笔者将一一道来,如下所示
1.自动配置的核心组件
1.1 `@SpringBootApplication` `@SpringBootApplication` 是一个组合注解,包含了以下几个核心注解: - `@Configuration`:表明该类是一个配置类。 - `@EnableAutoConfiguration`:启用自动配置。 - `@ComponentScan`:启用组件扫描,扫描当前包及其子包中的组件。 @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } 1.2 `@EnableAutoConfiguration` `@EnableAutoConfiguration` 是自动配置的核心注解, 它通过 `@Import(AutoConfigurationImportSelector.class)` 导入了自动配置选择器。 2. 自动配置选择器 (`AutoConfigurationImportSelector`) 2.1 `AutoConfigurationImportSelector` `AutoConfigurationImportSelector` 实现了 `ImportSelector` 接口,用于选择需要导入的自动配置类。 2.2 `getAutoConfigurationEntry` `getAutoConfigurationEntry` 方法负责获取自动配置的入口,主要逻辑如下: - 读取 `META-INF/spring.factories` 文件。 - 过滤出 `org.springframework.boot.autoconfigure.EnableAutoConfiguration` 键对应的配置类。 - 根据条件注解(如 `@ConditionalOnClass`、`@ConditionalOnMissingBean` 等)过滤这些配置类。 3. `spring.factories` 文件 3.1 文件位置 `spring.factories` 文件位于 `META-INF` 目录下,通常在依赖的 JAR 文件中。 3.2 文件内容 `spring.factories` 文件中定义了自动配置类的列表,格式如下: org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.config.MyAutoConfiguration,\ com.example.config.AnotherAutoConfiguration 4. 条件注解 4.1 常见条件注解 Spring Boot 提供了多种条件注解,用于控制自动配置类的启用条件: - `@ConditionalOnClass`:当类路径中存在指定类时启用。 - `@ConditionalOnMissingClass`:当类路径中不存在指定类时启用。 - `@ConditionalOnBean`:当 Spring 容器中存在指定 Bean 时启用。 - `@ConditionalOnMissingBean`:当 Spring 容器中不存在指定 Bean 时启用。 - `@ConditionalOnProperty`:当配置文件中存在指定属性时启用。 - `@ConditionalOnWebApplication`:当应用程序是 Web 应用程序时启用。 - `@ConditionalOnNotWebApplication`:当应用程序不是 Web 应用程序时启用。 4.2 示例 @Configuration @ConditionalOnClass(name = "org.springframework.web.servlet.DispatcherServlet") public class WebAutoConfiguration { // 自动配置逻辑 } 5. 自动配置过程 5.1 启动过程 当 Spring Boot 应用启动时,`SpringApplication.run` 方法会触发自动配置过程: - 创建 `ApplicationContext`。 - 读取 `spring.factories` 文件。 - 根据条件注解过滤自动配置类。 - 加载并注册自动配置类。 5.2 自动配置类 自动配置类通常包含以下内容: - `@Configuration`:表明该类是一个配置类 - 条件注解:控制自动配置类的启用条件 - `@Bean` 方法:定义需要自动配置Bean @Configuration @ConditionalOnClass(name = "org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType") public class DataSourceAutoConfiguration { @Bean @ConditionalOnMissingBean public DataSource dataSource() { // 自动配置数据源 return new EmbeddedDatabaseBuilder().build(); } } 6. 自定义自动配置 6.1 创建自定义自动配置类 你可以创建自定义的自动配置类,并在 `spring.factories` 文件中注册它们。 @Configuration @ConditionalOnProperty(name = "my.custom.feature.enabled", havingValue = "true") public class MyCustomAutoConfiguration { @Bean public MyCustomBean myCustomBean() { return new MyCustomBean(); } } 6.2 注册自定义自动配置类 在 `META-INF/spring.factories` 文件中注册自定义自动配置类: org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.example.config.MyCustomAutoConfiguration 7. 调试自动配置 7.1 启用调试日志 可以通过设置日志级别为 `DEBUG` 来查看自动配置的详细信息。 properties logging.level.org.springframework.boot.autoconfigure=DEBUG 7.2 使用 `spring-boot:run` 和 `spring-boot:build-info` 使用 Maven 插件可以生成构建信息,并查看自动配置报告。 mvn spring-boot:run -Ddebug
Spring Boot 的自动配置通过以下步骤实现: 1. `@SpringBootApplication` 启用自动配置 2. `@EnableAutoConfiguration` 导入 `AutoConfigurationImportSelector` 3. `AutoConfigurationImportSelector` 读取 `META-INF/spring.factories`文件 4. 条件注解 过滤自动配置类 5. 自动配置类 ---定义需要自动配置Bean
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。