介绍
Spring Boot的自动配置是其一大核心特性,可以让我们迅速构建出一个Spring应用程序。
特点
- 根据classpath中的Jar包依赖,自动配置Spring的基础配置项。如根据spring-data-jpa在classpath中自动配置Spring Data JPA。
- 提供了一系列的开箱即用的自动配置实现,解决了配置文件配置大量Bean的问题。这些自动配置实现都在spring-boot-autoconfigure包中。
- 自动配置会根据用户定义的Bean决定是否启用,可以进行自定义和重写。通过@Conditional注解实现条件化配置。
- 提供了众多开箱即用的启动器依赖,进一步简化了依赖管理,如spring-boot-starter-web等。
- 自动配置只会加载实际用到的配置项,通过@ConditionalOnClass、@ConditionalOnMissingBean等条件化配置来实现。
- 提供了准生产的外置配置文件支持,如application.properties。
- 可以通过@EnableAutoConfiguration控制自动配置的开关。
实现
1.@SpringBootApplication
这个注解包含了@EnableAutoConfiguration,它用来开启Spring Boot的自动配置功能。
@EnableAutoConfiguration 会利用AutoConfigurationImportSelector给容器导入一些自动配置类。
2. SpringFactoriesLoader
Spring Boot会通过SpringFactoriesLoader来加载META-INF/spring.factories文件中的自动配置类。
spring.factories文件中配置了很多自动配置的实现类,如:
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
当类路径下存在指定的依赖时,该依赖对应的自动配置类才会被实例化。
3.@Conditional
自动配置类上通常都使用了@Conditional注解,根据不同的条件来控制配置是否生效。
常用的有:@ConditionalOnClass、@ConditionalOnMissingBean等。
写在最后
如果大家对相关文章感兴趣,可以关注公众号”架构殿堂”,会持续更新AIGC,java基础面试题, netty, spring boot,spring cloud等系列文章,一系列干货随时送达!