一、自定义自动装配的步骤

1. 创建配置类

创建一个配置类,并使用 @Configuration 注解标记。在配置类中使用 @Bean 注解定义需要自动装配的 Bean。

如果需要基于条件加载配置,可以使用条件注解如 @ConditionalOnClass、@ConditionalOnMissingBean 等。
package com.example.autoconfig;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CustomAutoConfiguration {

    @Bean
    public CustomService customService() {
        return new CustomService();
    }
}

2. 定义自定义服务类

package com.example.autoconfig;

public class CustomService {
    public String getMessage() {
        return "Hello from CustomService!";
    }
}

3. 配置自动装配类

在 META-INF/spring.factories 文件中注册自动配置类,格式如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.CustomAutoConfiguration  
这样 Spring Boot 启动时会自动加载该配置类。多个配置类可以通过逗号分隔的方式列出,
如果需要控制配置类的加载顺序,可以通过 @Order 注解(优先级高)
或在 spring.factories 文件中的顺序来调整,例如:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.config.AConfig,\
com.example.config.BConfig

4. 打包并引入项目

将自定义代码打包为 JAR 文件,并通过 Maven 或 Gradle 引入到 Spring Boot 项目中。

二、Spring Boot 自动装配的流程

1. 启动类注解

Spring Boot 的启动类使用 @SpringBootApplication 注解,该注解是一个组合注解,
包含 @EnableAutoConfiguration、@ComponentScan 和 @Configuration。

2. 自动配置触发

@EnableAutoConfiguration 注解会触发自动配置机制。
Spring Boot 会扫描 META-INF/spring.factories 文件,加载其中定义的自动配置类。

3. 条件注解过滤

Spring Boot 会根据条件注解(如 @ConditionalOnClass、@ConditionalOnMissingBean)
判断是否需要加载某个配置类或 Bean。

4. Bean 注册
符合条件的配置类会被加载,其中定义的 Bean 会被注册到 Spring 容器中,供其他组件使用。

5. 依赖注入

其他组件可以通过 @Autowired 或构造函数注入的方式使用这些自动装配的 Bean。

三、Spring Boot 自动装配的原理

1. 核心注解 @SpringBootApplication

@SpringBootApplication 是 Spring Boot 应用的入口注解,它包含了三个关键注解:
@SpringBootConfiguration:标记当前类为配置类。
@EnableAutoConfiguration:启用自动装配功能。
@ComponentScan:扫描当前包及其子包下的组件。

2. 自动装配的实现

自动装配的核心逻辑在 @EnableAutoConfiguration 注解中。
它通过 @Import(AutoConfigurationImportSelector.class) 导入AutoConfigurationImportSelector 类,
该类实现了 ImportSelector 接口。在应用启动时,AutoConfigurationImportSelector 
会加载 META-INF/spring.factories 文件中定义的自动配置类。

3. 按需加载

Spring Boot 的自动装配是按需加载的,即只有在满足特定条件时,相关的配置类才会被加载。
这是通过 @Conditional 系列注解(如 @ConditionalOnClass、@ConditionalOnMissingBean 等)实现的。

4. spring.factories 文件

自动装配的配置类定义在 META-INF/spring.factories 文件中。
Spring Boot 在启动时会读取该文件,加载其中定义的自动配置类,并根据条件判断是否需要启用这些配置。

5. 简化配置

自动装配的目的是减少开发者的配置工作。
通过 Starter 组件,Spring Boot 可以自动引入所需的依赖和配置,开发者只需关注业务逻辑。

高旭
40 声望3 粉丝