自动配置介绍
Spring Boot自动装配(Auto Configuration)是Spring Boot框架的一个关键特性,它通过约定大于配置的方式来简化项目的配置过程。自动装配允许开发人员使用默认的配置,同时也可以根据需要进行定制化。Spring通过使用@Autowired
注解、@ComponentScan
注解以及条件化配置等机制,实现了自动装配的功能。
@Autowired注解: 通过在类的构造方法、成员变量或方法上使用@Autowired
注解,Spring容器可以自动满足Bean之间的依赖关系。当容器启动时,它会扫描并识别带有@Autowired
注解的地方,并自动装配相应的Bean。
@ComponentScan注解: 使用@ComponentScan
注解可以告诉Spring容器在指定的包或类路径下扫描并注册所有标有@Component
及其相关注解(如@Service
、@Repository
等)的类作为Bean。这样,开发者无需手动在配置文件中逐个声明每个Bean,而是通过约定大于配置的方式,让Spring自动发现和注册Bean。
条件化配置: Spring Boot通过条件化配置来决定是否需要加载某个配置类或Bean。条件注解(如@ConditionalOnClass
、@ConditionalOnBean
、@ConditionalOnProperty
等)在配置类上使用,根据一定的条件来判断是否满足加载的条件。
自动配置类: Spring Boot中的自动配置类通常以xxxAutoConfiguration命名的方式
,它包含了一系列的Bean定义和配置,根据条件是否满足,自动配置相应的功能。这些类位于spring-boot-autoconfigure
模块中。
自动配置的重要注解
-
@EnableAutoConfiguration: 这是Spring Boot自动配置的核心注解。通常在应用的主类上使用该注解,它会启用Spring Boot的自动配置机制。
@EnableAutoConfiguration
会根据项目的依赖关系和配置自动装配和配置Spring Bean。它通常与@SpringBootApplication
一起使用,并启用自动配置机制。通过@EnableAutoConfiguration
,Spring Boot会根据项目的依赖自动配置Bean。 -
@Configuration: 该注解表示一个配置类,其中定义了一些Bean的创建和配置。自动配置类通常使用
@Configuration
注解进行标记。类似于传统的XML配置文件。自动配置类通常会使用@Configuration
注解,用于告诉Spring容器这是一个配置类。 -
@AutoConfigureAfter: 该注解指定自动配置类的加载顺序。通过指定其他自动配置类的类名,确保配置类的加载顺序正确。
-
@ConfigurationProperties: 该注解用于绑定配置属性到Java对象。可以在自动配置类及其他组件中使用,将应用程序的配置项映射到对应的属性。
-
@Bean: 用于在配置类中注册Bean。
@Bean
注解通常与@Configuration
一起使用,在方法级别上标记一个方法返回的对象应该被注册为一个Bean。
自动配置实现
自动装配的入口:org.springframework.boot.autoconfigure.AutoConfigurationImportSelector
spring-autoconfigure-metadata.properties:
spring-autoconfigure-metadata.properties 文件存储的是”待自动装配候选类“过滤的计算规则,这个信息很重要,框架会根据里面的规则逐一对候选类进行计算看是否需要被自动装配进容器,并不是全部加载。
spring.factories:
存储了spring-boot所有默认支持的待自动装配候选类,文件通常位于 resources/META-INF
目录下,并且以键值对的形式进行配置。每个键对应一个配置项,值则为对应配置项的实现类。
可以看一下这个博主的分享,非常的详细:文章来源:https://www.toymoban.com/news/detail-822445.html
Springboot自动装配之spring-autoconfigure-metadata.properties和spring.factories(SPI机制核心)-CSDN博客文章来源地址https://www.toymoban.com/news/detail-822445.html
到了这里,关于spring boot 自动配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!