湖南做网站 干净磐石网络,嘉峪关市住房和城乡建设局网站,wordpress首页留言板,长沙定制网站Spring Boot 的自动配置是其核心特性之一#xff0c;它帮助开发者**开箱即用**地使用各种第三方库或 Spring 组件#xff0c;而无需手动配置 Bean。这一切的背后#xff0c;都依赖于 Spring Boot 的自动配置机制。 我们分两部分来说#xff1a; Spring Boot 自…Spring Boot 的自动配置是其核心特性之一它帮助开发者**开箱即用**地使用各种第三方库或 Spring 组件而无需手动配置 Bean。这一切的背后都依赖于 Spring Boot 的自动配置机制。 我们分两部分来说 Spring Boot 自动配置的整体流程 我们依赖的第三方包是如何一步步被自动配置并导入使用的 一、Spring Boot 自动配置的整体流程
1. SpringBootApplication 注解启动入口
SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}SpringBootApplication 是一个组合注解包含 SpringBootConfiguration实际上就是 Configuration EnableAutoConfiguration ComponentScan
2. 关键点EnableAutoConfiguration
这个注解的作用就是启用自动配置底层依赖的是
AutoConfigurationPackage
Import(AutoConfigurationImportSelector.class)这里的核心逻辑是导入一批配置类这些类就定义了我们依赖的组件如何被自动装配。
3. AutoConfigurationImportSelector 工作机制 它会去加载 META-INF/spring.factoriesSpring Boot 2.x 或 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.importsSpring Boot 3.x中的配置类列表。 这些类就是一堆以 xxxAutoConfiguration 结尾的类比如
# META-INF/spring.factoriesSpring Boot 2.x
org.springframework.boot.autoconfigure.EnableAutoConfiguration\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
...Spring Boot 会按需加载这些自动配置类也就是判断你是否引入了相关依赖、是否配置了对应属性等来决定要不要配置这个组件。 二、依赖的包是如何一步步自动配置导入的
举个例子我们引入了 spring-boot-starter-data-redis程序中就能直接用 RedisTemplate。
来看这条链路是怎么走通的
步骤 1你引入了 Redis 的 starter
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId
/dependency它的依赖会自动包含 spring-data-redis lettuce-core默认客户端 spring-boot-autoconfigure
步骤 2自动配置类生效
在 spring-boot-autoconfigure 包的 spring.factories 文件中你会看到
org.springframework.boot.autoconfigure.EnableAutoConfiguration\
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration这个配置类就被加载了。
步骤 3RedisAutoConfiguration 中的 Bean 被自动注册
打开源码可以看到
Configuration
ConditionalOnClass(RedisOperations.class)
ConditionalOnBean(RedisConnectionFactory.class)
EnableConfigurationProperties(RedisProperties.class)
public class RedisAutoConfiguration {BeanConditionalOnMissingBean(name redisTemplate)public RedisTemplateObject, Object redisTemplate(RedisConnectionFactory redisConnectionFactory) {...}
}这表示 如果项目中有 Redis 相关类即你引入了相关依赖 如果容器里没有手动注入 RedisTemplate 那就自动帮你注册一个默认的 RedisTemplate Bean
步骤 4你就可以在代码中使用了
Autowired
private RedisTemplate redisTemplate;你并没有显式配置 Redis 相关的 Bean但因为自动配置已经做完了所以直接就能使用。 总结流程图
SpringBootApplication↓
EnableAutoConfiguration↓
AutoConfigurationImportSelector↓
读取 spring.factories / spring-autoconfigure-metadata↓
加载 xxxAutoConfiguration 类↓
根据条件注册 BeanConditionalOnClass / OnBean / OnProperty↓
你就能直接使用这些 Bean补充如何自定义或覆盖自动配置 如果你自己定义了同名 Bean比如 RedisTemplate就会覆盖自动配置ConditionalOnMissingBean 生效。 想要禁用某个自动配置可以通过
spring.autoconfigure.exclude:- org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration如果你有某个具体依赖包的例子比如 MyBatis、Kafka、Elasticsearch我也可以具体分析它的自动配置链路。需要的话随时说~