@Configuration 和 @AutoConfiguration 的区别

参考:https://stackoverflow.com/a/74117678

@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提供了一些配置选项,如beforeafterbeforeNameafterName,以允许依赖提供者指定在应用启动期间何时应用配置,Spring Boot 会对被@AutoConfiguration标注的类进行排序,按声明的顺序依次加载。

Spring Boot 2.7 之前使用@AutoConfigureBefore@AutoConfigureAfter来指明加载顺序(注解 @AutoConfigureBefore 和 @AutoConfigureAfter 的用途)。

因此,这个注解是为那些开发依赖库的开发者准备的,这些库可能会被使用者引入到 Spring Boot 项目中。比如 Kafka 的相关库。

另外:

  • 为了使其在 Spring Boot 项目中生效,需要使用@EnableAutoConfiguration来启用自动配置
  • @AutoConfiguration注解本身被@Configuration标记,所以它也可以被用来创建 Bean
posted @ 2024-11-27 21:43  Higurashi-kagome  阅读(110)  评论(0编辑  收藏  举报