首先我们来看一段代码,SpringBoot启动类:
public static void main(String[] args) {SpringApplication.run(StudentApplication.class);}
只有一行代码,却完成了ssm中大量配置才能完成的事情,这一行代码中的一个方法究竟做了什么事情。
在我们该类之后,大致做了两件事,一是SpringApplication初始化,二是SpringApplication.run()启动
public static ConfigurableApplicationContext run(Class<?> primarySource,String... args) {return run(new Class<?>[] { primarySource }, args);}
调用静态方法初始化SpringApplication,然后启动运行
public static ConfigurableApplicationContext run(Class<?>[] primarySources,String[] args) {return new SpringApplication(primarySources).run(args);}
初始化方法底层代码
public SpringApplication(Class<?>... primarySources) {this(null, primarySources);}public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {//初始化资源加载器this.resourceLoader = resourceLoader;Assert.notNull(primarySources, "PrimarySources must not be null");//将启动类的配置信息存储在集合中this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));//推断web环境的类型(reactive,none,servlet)this.webApplicationType = deduceWebApplicationType();//设置初始化器 从配置文件spring.factories中查找所有的key=org.springframework.context.ApplicationContextInitializer的类【加载,初始化,排序】setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitial

本文探讨了SpringBoot启动类仅凭一行代码如何实现SSM中复杂配置的功能。通过分析,揭示了SpringApplication初始化和run()方法启动过程,包括资源加载器的初始化、启动类信息存储、推断Web环境、设置初始化器和监听器,以及如何识别main方法的入口类。
最低0.47元/天 解锁文章
9495

被折叠的 条评论
为什么被折叠?



