@AutoConfiguration 和Configuratio

2025-02-10  本文已影响0人  flystarts

出现版本与背景
@Configuration:这是 Spring 框架中很早就存在的注解,从 Spring 3.0 开始引入。它用于将一个类标记为配置类,这个类可以包含多个 @Bean 方法,其作用类似于传统的 Spring XML 配置文件。
@AutoConfiguration:是 Spring Boot 3.0 引入的新注解,主要为了简化自动配置类的定义,让自动配置类的声明更加清晰和规范。他包含了@Configuration

功能用途
@Configuration
手动配置 Bean:开发者使用 @Configuration 注解自定义配置类,在其中通过 @Bean 方法手动定义和注册 Bean 到 Spring 容器中。可以精确控制 Bean 的创建、初始化和依赖注入过程。
管理应用特定配置:常用于管理应用内部特定的配置,例如自定义数据源、事务管理器等。

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

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyService();
    }
}

@AutoConfiguration
自动配置 Bean:主要用于自动配置类,Spring Boot 在启动时会根据类路径、配置属性等条件自动加载和应用这些配置类。这些配置类通常是为了集成第三方库或提供通用的功能而设计的。
减少开发者配置工作量:开发者只需引入相应的依赖,Spring Boot 就能根据自动配置类自动完成 Bean 的注册和配置,无需手动编写大量的配置代码。

应用场景
@Configuration
自定义业务逻辑配置:当需要根据应用的具体业务需求进行定制化配置时,使用 @Configuration 注解。
局部配置调整:针对应用中的某些特定模块或功能进行局部的配置调整。
@AutoConfiguration
集成第三方库:当引入第三方库时,Spring Boot 提供的自动配置类(使用 @AutoConfiguration 注解)可以自动完成与该库相关的 Bean 配置。例如,引入 Redis 依赖后,Spring Boot 会自动配置 Redis 连接池和 RedisTemplate 等 Bean。
通用功能配置:用于配置一些通用的功能,如日志、缓存等,减少开发者的重复配置工作。

条件注解使用
@Configuration:可以结合条件注解(如 @ConditionalOnClass、@ConditionalOnMissingBean 等)使用,但通常是在手动控制配置的情况下使用,开发者需要明确指定条件。
@AutoConfiguration:自动配置类通常会大量使用条件注解,Spring Boot 根据类路径中的类、配置属性等自动判断是否启用该自动配置类,以实现按需配置。

加载机制
@Configuration:需要通过组件扫描(如 @ComponentScan)或在 @SpringBootApplication 所在包及其子包下才能被 Spring 容器发现和加载,或者通过 @Import 注解显式引入。
@AutoConfiguration:Spring Boot 会根据 META - INF/spring.factories 文件(Spring Boot 3.0 之后也支持 META - INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件)中的配置自动加载这些自动配置类,无需开发者手动引入。

总结:
@AutoConfiguration 是一种特殊的@Configuration , 一般用来开发三方库,通过spring.factories 实现自动加载

上一篇 下一篇

猜你喜欢

热点阅读