Spring Boot工作原理梳理及步骤正确性验证请求
Spring Boot 启动步骤梳理修正
你的整体梳理方向是对的,但存在几处细节错误,修正后的内容如下:
核心启动代码
@SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
修正后的启动步骤
- 运行
MyApplication,程序进入main方法,执行SpringApplication.run(MyApplication.class, args);(注:你步骤1里的代码块写错了类名,应为MyApplication而非MyappApplication) SpringApplication.run(Class<?> primarySource, String... args)方法会先创建SpringApplication实例,完成环境准备、加载初始化器和监听器等前置操作后,才创建并刷新ApplicationContext,最终返回运行中的上下文(注:步骤2里的PrimaryTarget表述不准确,实际是传入主类的Class对象)- Spring Boot会解析主类(
MyApplication.class)上的注解,而非由ApplicationContext直接扫描 - 识别到主类上的
@SpringBootApplication注解 @SpringBootApplication=@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan(注:@SpringBootConfiguration是@Configuration的特殊形式,本质和你写的@Configuration等价,Spring Boot 2.2+版本明确使用@SpringBootConfiguration)@EnableAutoConfiguration通过SpringFactoriesLoader加载META-INF/spring.factories中定义的自动配置类,这些配置类会结合@ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty等多种条件注解,判断是否开启对应配置(不止JPA或Kafka,覆盖Web、数据库、消息队列等众多场景)@ComponentScan默认扫描主类所在的包及其所有子包,将带有@Component、@Service、@Repository、@Controller等注解的类创建为Bean并加入ApplicationContext(注:不是扫描整个src目录,而是基于主类所在包的范围)
内容的提问来源于stack exchange,提问作者Aditya Kumar
相关产品推荐
相关产品推荐

