探秘汉字之美:从“辶喿辶喿辶臿”到“辶喿辶念”的奇幻之旅
Spring Boot çš„å�¯åЍå�Ÿç�†å�¯ä»¥ç”¨ä¸€å�¥è¯�概括一个main方法 → å�¯åЍ SpringApplication → 创建并刷新 Spring 容器 → å�¯åŠ¨å†…åµŒ Web æœ�务器 → 自动装é…�所有组件。EnableAutoConfiguration会通过AutoConfigurationImportSelectorä»�META-INF/spring/...AutoConfiguration.imports收集所有自动é…�置类并基äº�Conditional*æ�¡ä»¶ç±»å˜åœ¨/å±�性开å�¯/Bean 缺失ç‰ç›é€‰ã€�æ�’åº�å��导入到容器最终å®�ç�°â€œstarter 引入ä¾�èµ–å�³å�¯è‡ªåЍè�·å¾—默认 Bean ä¸�功能â€�。下é�¢æŒ‰çœŸå®�底层æµ�ç¨‹ç»™ä½ æ‹†å¼€è®²å��æº�ç �级æ€�路。一ã€�å…¥å�£main 方法SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }真æ£å�šäº‹çš„æ˜¯SpringApplication.run()二ã€�SpringApplication.run å�šäº†ä»€ä¹ˆæ ¸å¿ƒå››æ¥
æ�¨æ–应用类å�‹Web / Reactive / NoneApplicationType SERVLET / REACTIVE / NONEåˆ¤æ–æœ‰æ²¡æœ‰DispatcherServlet→ Spring MVCWebFlux→ å“�应å¼�都没有 → 普通 Java 程åº�
创建并准备 Spring 容器创建的是ConfigurableApplicationContext例如Web 项目AnnotationConfigServletWebServerApplicationContextç„¶å��å�šåŠ è½½ApplicationContextInitializer设置 Environment读å�–é…�ç½®application.ymlapplication.propertiesç�¯å¢ƒå�˜é‡�JVM å�‚æ•°Nacos / Apollo ç‰
åˆ·æ–°å®¹å™¨æ ¸å¿ƒç‰ä»·äº�调用context.refresh();这里进入Spring å�Ÿç”Ÿå�¯åЍæµ�程扫æ�� BeanComponentScanè§£æ��é…�置类Configuration处ç�†è‡ªåŠ¨è£…é…�EnableAutoConfigurationå®�例化 Beanä¾�赖注入åˆ�始化 BeanPostConstruct, InitializingBean
å�¯åŠ¨å†…åµŒ Tomcat / Netty / JettySpring Boot çš„é�©å‘½æ€§ç‚¹æŠŠ Web 容器å�˜æˆ�普通 Bean自动创建TomcatServletWebServerFactoryç„¶å��webServer.start();端å�£ç›‘å�¬å®Œæˆ�应用å�¯è®¿é—®ã€‚三ã€�自动装é…�å�Ÿç�†Spring Boot çš„ç�µé‚ä½ æ²¡å†™ä»»ä½•é…�ç½®å�´è‡ªåŠ¨æœ‰DataSourceRedisKafkaMVCJacksonMyBatisClickHouse DriverTomcatå�Ÿå› 是
SpringBootApplication 本质ç‰ä»·äº�Configuration ComponentScan EnableAutoConfiguration
EnableAutoConfiguration å¹²äº†ä»€ä¹ˆå®ƒä¼šåŠ è½½META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.importsè€�版本是 spring.factories里é�¢æ˜¯æˆ�百上å�ƒä¸ªè‡ªåЍé…�置类DataSourceAutoConfiguration RedisAutoConfiguration KafkaAutoConfiguration TomcatAutoConfiguration ...æ¯�个都带æ�¡ä»¶æ³¨è§£ConditionalOnClass ConditionalOnBean ConditionalOnMissingBean ConditionalOnPropertyæ„�æ€�是类å˜åœ¨æˆ‘æ‰�装Bean ä¸�å˜åœ¨æˆ‘æ‰�装é…�置开å�¯æˆ‘æ‰�装这就å®�ç�°äº†æ™ºèƒ½è£…é…�。四ã€�完整å�¯åŠ¨æ—¶åº�图工程级视角main() ↓ SpringApplication.run() ↓ 创建 ApplicationContext ↓ åŠ è½½ Environmenté…�ç½®ä¸å¿ƒ / yml / å�˜é‡� ↓ 执行自动装é…�EnableAutoConfiguration ↓ 扫æ��å¹¶å®�例化 Bean ↓ 创建内嵌 Tomcat ↓ 注册 DispatcherServlet ↓ å�¯åŠ¨ç«¯å�£ç›‘å�¬ ↓ 应用就绪ApplicationReadyEvent
XXXX18馃崙馃崋賮賶賱賶賲-XXXX18馃崙馃崋賮賶賱賶賲应用