@Configuration 和 @AutoConfiguration 的区别
@Configuration
是一个 Spring 注解,并不严格绑定于 Spring Boot。它的作用是支持以编程方式创建 Spring Bean,以简化 XML 配置。
@AutoConfiguration
是 Spring Boot 提供的注解(Spring Boot 2.7 引入)。它的存在是为了让与 Spring Boot 协作的外部服务提供者能够在他们提供的某些库中标记一些类,告知 Spring Boot 这些类可以被解析,Spring Boot 在启动时,会扫描到这些类并自动进行一些初始化操作。
根据 Spring Boot 文档:
Spring Boot 的自动配置尝试根据您添加的 JAR 依赖项自动配置您的 Spring 应用。例如,如果 HSQLDB 在您的类路径中,并且您没有手动配置任何数据库连接 Bean,那么 Spring Boot 会自动配置一个内存数据库。
依靠此机制,如果开发人员在开发应用时恰好将 Kafka 作为依赖,那么一些 Bean 将会自动创建并添加到 Spring 容器中以供程序员使用,尽管他并没有为这些 Bean 定义任何配置。Spring Boot 之所以知道注入哪些 Bean,是因为 Kafka 的提供者已经在他们提供的 JAR 中用@AutoConfiguration
注解标记了某个类,Spring Boot 扫描到这个类之后,就会进行初始化操作(往容器注入 Bean)。
初始化可能存在先后顺序,所以@AutoConfiguration
提供了一些配置选项,如before
、after
、beforeName
和afterName
,以允许依赖提供者指定在应用启动期间何时应用配置,Spring Boot 会对被@AutoConfiguration
标注的类进行排序,按声明的顺序依次加载。
Spring Boot 2.7 之前使用
@AutoConfigureBefore
和@AutoConfigureAfter
来指明加载顺序(注解 @AutoConfigureBefore 和 @AutoConfigureAfter 的用途)。
因此,这个注解是为那些开发依赖库的开发者准备的,这些库可能会被使用者引入到 Spring Boot 项目中。比如 Kafka 的相关库。
另外:
- 为了使其在 Spring Boot 项目中生效,需要使用
@EnableAutoConfiguration
来启用自动配置 @AutoConfiguration
注解本身被@Configuration
标记,所以它也可以被用来创建 Bean