springboot run方法执行流程详解(二)

我们接着上篇博客,继续看springboot.run方法。

5

this.configureIgnoreBeanInfo(environment);

在这里插入图片描述>我们看到这一步了,点进去看下执行了什么操作:
在这里插入图片描述
内容很简单,就是配置spring.beaninfo.ignore。也就是设置需要忽略掉的bean

6

Banner printedBanner = this.printBanner(environment);

这步主要是打印banner,我们点进去看下具体操作:
在这里插入图片描述
这里声明一下,banner的输出模式有三种:
在这里插入图片描述
OFF:关闭banner,CONSOLE:控制台打印,LOG:日志打印,默认是CONSOLE(控制台打印)。
让我们回到printBanner方法:
在这里插入图片描述
这里会先判断banner模式是否为关闭,如果关闭,直接return,也就不会输出banner,如果不为OFF,那么就会获取ResourceLoader路径,然后根据这个路径信息创建SpringApplicationBannerPrinter,然后根据我们设定的banner输出模式进行banner打印。
我们来看下SpringApplicationBannerPrinter这个类里的print方法,看下他是怎么打印banner 的:
在这里插入图片描述
Banner banner = this.getBanner(environment);点进去:
在这里插入图片描述
这下就看的比较清晰了,它首先判断Classpath 路径下有没有 banner.gif 或 banner.jpg 或 banner.png , 先找到谁就用谁。以上都没有就在 Classpath 下找 banner.txt,如果banner.txt也没有就会打印默认的banner->DEFAULT_BANNER:
在这里插入图片描述
打印效果如下:
在这里插入图片描述

7

context = this.createApplicationContext();

这步主要是创建容器,这一步比较重要,我们点进去看下:
在这里插入图片描述
上面方法主要是根据webApplicationType创建对应的web应用上下文,并对其部分属性进行实例化,然后将生成的contextClass强转成ConfigurableApplicationContext类型容器。默认是SERVLET类别,因此这里生成的是AnnotationConfigServletWebServerApplicationContext,实例化AnnotationConfigServletWebServerApplicationContext这步操作内容及其复杂,我在网上找了一片讲解的非常详细的博客,大家可以参考,我这里就不细说了。createApplicationContext方法详解

8

exceptionReporters = this.getSpringFactoriesInstances(SpringBootExceptionReporter.class, new Class[]{ConfigurableApplicationContext.class}, context);

点进去:
在这里插入图片描述
主要看第二行和第三行,第二行我们又看到了熟悉的SpringFactoriesLoader.loadFactoryNames方法,这个方法大家应该很熟悉了吧(不熟悉的可以看我之前发的springboot自动加载配置的博文,里面有讲解springboot自动加载配置),
主要就是从类加载路径中获取全部的spring.factories文件,然后循环遍历读取这些文件中的键值对,将内容放入内存缓存,下次再调用这个方法时会优先从缓存中获取;这里会将返回的键值对封装成Set。
List<T> instances = this.createSpringFactoriesInstances(type, parameterTypes, classLoader, args, names);我们点进去看下:
在这里插入图片描述
这个方法主要就是循环从spring.factories里获取的实例名,然后通过名字获取对应的Class实例,再通过Class实例获取构造器,然后使用构造器构造出类实例。
以上就是对getSpringFactoriesInstances方法的全部描述。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值