10.19
@SpringBootApplication注解里藏了三个东西:@SpringBootConfiguration、@ComponentScan、@EnableAutoConfiguration。自动配置的核心是第三个。
它的原理是:@EnableAutoConfiguration通过@Import导入了一个AutoConfigurationImportSelector,这个类会去读所有jar包下的META-INF/spring.factories(新版本是spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports)文件,把里面配置的类全部加载进来。
比如引入spring-boot-starter-web,就会加载DispatcherServletAutoConfiguration、ServletWebServerFactoryAutoConfiguration等,自动帮你配好Tomcat和SpringMVC。
但并不是全都生效。每个自动配置类上都有@ConditionalOnClass、@ConditionalOnMissingBean这类条件注解。比如DataSourceAutoConfiguration只有在classpath里有DataSource类时才生效;@ConditionalOnMissingBean表示你自己配了Bean,它就不配了。
怎么排查? 启动时加--debug参数,会打印自动配置报告,哪些生效哪些没生效一目了然。或者引入actuator,访问/actuator/conditions。
理解这个机制,面试问"Spring Boot为什么简化配置"你就能答到点上,而不是只说"约定大于配置"。
浙公网安备 33010602011771号