SpringBoot 的⾃动配置不是魔法,靠的是约定⼤于配置的思想和⼏个关键机制组合起来的。
启动时会扫描 classpath 下所有 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports ⽂件,⾥⾯列了⼀堆自动配置类。这些类不会⽆脑加载,每个都带着条件注解,⽐如 @ConditionalOnClass 、@ConditionalOnMissingBean ,只有满⾜条件才⽣效。
举个例⼦,你引⼊了 spring-boot-starter-data-redis ,classpath ⾥有了LettuceConnectionFactory ,⾃动配置发现这个类存在,⽽且容器⾥还没⼈创建过 RedisTemplate,它就帮你把连接池、模板对象都配好。
1) ⾃动配置类通常放在 spring.factories 或org.springframework.boot.autoconfigure.AutoConfiguration.imports 中
2) 条件装配确保不冲突,⽐如只在某个类存在且某个 Bean 缺失时才创建
3) 配置优先级可通过 @AutoConfigureAfter 控制
别⼩看 @EnableAutoConfiguration 这个注解,它就是触发整个链路的开关。实际项⽬⾥像 Nacos、MyBatis-Plus 的 starter 都是照这个套路来,把⼀堆初始化逻辑封装掉,你写个依赖就能⽤。