springboot 如何实现自动配置呢?

欣喜 SpringBoot 发布时间:2025-02-05 14:28:38 阅读数:4557 1
我们都知道SpringBoot自动配置可以使用开发java程序变的更简单,
那么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
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202502/8282.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者