最重要的是,“Auto”前缀背后的原因是什么?用@Configuration注释的类而不是@AutoConfiguration的类是否不那么自动化或者其他原因?
最重要的是,“Auto”前缀背后的原因是什么?用@Configuration注释的类而不是@AutoConfiguration的类是否不那么自动化或者其他原因?
@Configuration
是Spring框架的一个注解,与spring-boot
没有严格的绑定关系。当Spring开始允许编程创建spring-beans
时,引入了这个注解,以便从xml
定义的bean中向前迈进。
@AutoConfiguration
是一个spring-boot
特定的注解,在Spring框架中通常不可用。它存在的原因是为了与spring-boot
合作的外部提供者能够将他们提供的某些库中的一些类标记为这个注解,以便在Spring应用程序启动期间自动地进行一些初始化操作。
因此,如果一些普通程序员开发某个应用程序并使用kafka
依赖项,则会自动创建一些bean并添加到应用程序上下文中,并准备好供程序员使用,尽管他没有为它们定义任何配置。Spring-boot
已经知道这一点,因为kafka
提供者已经通过在其提供的jar文件中标记某个类的注释@AutoConfiguration
来通知了它。
出于这个原因,@AutoConfiguration
有一些更强大的配置可用,如before
、after
、beforeName
和afterName
,以允许提供者在应用程序启动期间指定配置何时应用,如果需要某种顺序。
因此,这个注解不是为了从一些开发使用spring-boot
的普通程序员那里使用。它是为那些开发可能与spring-boot
一起使用的库的人准备的。其中一个例子是kafka
库。
为了在spring-boot
项目中使其工作,还需要使用@EnableAutoConfiguration
来启用自动配置。
来自Spring文档
Spring Boot自动配置尝试根据您添加的jar依赖项自动配置您的Spring应用程序。例如,如果HSQLDB在您的类路径上,并且您没有手动配置任何数据库连接bean,则Spring Boot将自动配置内存数据库。
@Configuration
则应该由一些使用spring-boot
或spring-framework
的普通开发人员使用,以通知框架哪些bean应该被创建以及如何创建它们。
@AutoConfiguration
是在2.7版本中引入的,旨在使用其专用注释标记所有自动配置,并在3.0中摆脱spring.factories
以进行自动配置导入,如Github issue所述。
根据Spring文档:
[@AutoConfiguration] 表示一个类提供了可以由Spring Boot自动应用的配置。自动配置类是常规的@Configuration,唯一的例外是Configuration#proxyBeanMethods() proxyBeanMethods始终为false。
通常,@AutoConfiguration
类会根据类路径上存在的依赖项自动配置应用程序。这些类通常标有@ConditionalOnClass
和@ConditionalOnMissingBean
注释,以检测特定类的存在或缺失。
@AutoConfiguration
上使用before
、beforeName
、after
和afterName
属性,而@Configuration
则不提供这些属性。
@Configuration
是Spring注解,而@AutoConfiguration
是仅适用于spring-boot
的注解。从这一点出发,如果您阅读我的答案,您就可以理解auto
前缀是如何发挥作用的。 - Panagiotis Bougioukos