spring boot自动配置省去了传统spring mvc中手动注册dispatcherservlet、配置internalresourceviewresolver和mappingjackson2httpmessageconverter等操作,以及jpa中手写datasource、entitymanagerfactory和transactionmanager等繁重配置,仅需引入starter依赖和简单属性配置即可完成组件自动装配。

SpringBoot自动配置能让你在引入spring-boot-starter-web后,不写一行XML或Java配置,就直接启动一个带Tomcat和DispatcherServlet的Web服务,而传统Spring项目必须手动注册Servlet、配置视图解析器、声明消息转换器等十多项Bean。
自动配置省掉了哪些手动操作
传统Spring MVC项目需显式定义以下三类核心组件:① DispatcherServlet作为前端控制器,需在web.xml中注册或通过ServletRegistrationBean声明;② InternalResourceViewResolver用于解析JSP路径,必须指定prefix和suffix;③ MappingJackson2HttpMessageConverter处理JSON序列化,要手动注入ObjectMapper并设置日期格式。这些配置在Spring Boot中全部消失——只要依赖存在,对应Bean就自动注册进容器。
引入spring-boot-starter-data-jpa时,传统方式要手写DataSource(含URL/用户名/密码/驱动类)、LocalContainerEntityManagerFactoryBean(含包扫描路径、JPA供应商)、JpaTransactionManager(绑定数据源);Spring Boot仅需在application.yml里填spring.datasource.url等三项,其余全由JpaBaseConfiguration类按条件注入。
@EnableAutoConfiguration如何触发自动装配
第一步:启动类上的@SpringBootApplication注解隐含@EnableAutoConfiguration;
第二步:@EnableAutoConfiguration通过@Import(AutoConfigurationImportSelector.class)导入选择器;
第三步:该选择器调用SpringFactoriesLoader.loadFactoryNames(),扫描所有META-INF/spring.factories文件(Spring Boot 3.0+已迁移至META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports),读取其中org.springframework.boot.autoconfigure.EnableAutoConfiguration键对应的100+个配置类全限定名;
第四步:对每个候选配置类,检查其上标注的@ConditionalOnClass、@ConditionalOnMissingBean等条件——比如RedisAutoConfiguration要求类路径存在RedisOperations.class且容器中未定义RedisTemplate实例,两项同时满足才加载。
条件注解决定“该不该配”
方法一:@ConditionalOnClass检查类是否在classpath中。例如HikariDataSource.class存在时,DataSourceAutoConfiguration才会生效——若你用的是Druid连接池,Hikari类不存在,该配置类直接跳过,避免冲突。
方法二:@ConditionalOnMissingBean确保不覆盖已有Bean。当你自己定义了@Bean DataSource dataSource()方法,Spring Boot内置的DataSource自动配置就会被抑制,【这是防止重复注册导致启动失败的关键保护】。
方法三:@ConditionalOnProperty依据配置项开关功能。如spring.redis.enabled=false时,所有Redis相关自动配置类均不加载,连RedisAutoConfiguration里的@ConditionalOnClass(RedisOperations.class)都不再判断。
starter封装让依赖即能力
spring-boot-starter-web不是单个jar,而是Maven BOM(Bill of Materials):它声明了spring-webmvc、tomcat-embed-core、jackson-databind等7个依赖的精确版本,并在自己的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports中预置WebMvcAutoConfiguration、EmbeddedTomcatAutoConfiguration等类路径——你只需引入一个starter,框架就知道该加载哪些自动配置类、该准备哪些底层依赖。
这一步操作起来很简单,直接把spring-boot-starter-web加进pom.xml就行。但背后是Spring Boot团队为每个中间件(Redis/Kafka/JDBC)都编写了配套的starter和自动配置类,开发者不用再查文档确认该引哪些包、哪个版本兼容、怎么初始化模板对象。











