文章插图
前言
每次启动SpringBoot项目时,总是能看到控制台打印了一串字符,隐约能辨认出是“Spring”,不知大家是否也好奇过是怎么实现的,是直接打印固定的字符串,还是根据什么算法去生成的?于是闲暇无事,探究一番 。
文章插图
只想修改banner可以跳到文末查看SpringBoot是怎么打印的 Banner默认实现类 SpringBootBanner
1、根据控制台打印的字符进行全局搜索,笔者选取:: Spring Boot ::进行搜索,定位到了org.springframework.boot.SpringBootBanner 。
IDEA全局搜索:CTRL + SHIFT + R
文章插图
2、进入SpringBootBanner类,先看下注释Default Banner implementation which writes the 'Spring' banner.,说了两个信息:1、当前类是SpringBoot Banner的默认实现;2、打印的字符是“Spring” 。
3、往下看,SpringBootBanner实现了Banner接口 。Banner包括printBanner方法和枚举Mode 。
根据Mode中的注释和枚举值可以看出,Banner有三种状态:关闭、打印到控制台、打印到日志 。具体使用场景留待后续分析 。
Banner源码
4、往下看到类的属性BANNER和SPRING_BOOT,也能辨认出是控制台打印的那些字符 。
类里面只有一个方法printBanner,负责打印Banner字符 。逻辑比较清晰,第一部分逐行打印BANNER形成图案;第二部分打印SpringBoot版本号,总长度由STRAP_LINE_SIZE控制 。
SpringBootBanner完整代码
Banner核心控制类 SpringApplicationBannerPrinter1、上节找到了负责存储和打印Banner字符的类SpringBootBanner,现在向调用链上方继续寻找,通过CTRL + B或者全局搜索可以发现SpringBootBanner在SpringApplicationBannerPrinter类中作为类变量,大概能猜测出这个SpringApplicationBannerPrinter类是Banner打印的核心控制器 。
2、进入SpringApplicationBannerPrinter类,照例先看注释Class used by SpringApplication to print the application banner.,意思是当前类被SpringApplication用来打印banner 。
这个SpringApplication好像有点眼熟,名字和我们SpringBoot项目的启动类有点相似,翻翻启动类的代码,想起我们就是通过SpringApplication的run方法启动项目,banner打印调用也是由SpringApplication控制的,后续会详细分析 。(占坑,后续SpringBoot启动流程也会出一篇博客去探讨一下)
文章插图
回归正题,继续从类的属性开始看,根据名字猜测大概含义,留待后续验证:
- BANNER_LOCATION_PROPERTY:Spring配置,大概是banner文件的路径 。
- BANNER_IMAGE_LOCATION_PROPERTY:Spring配置,banner图片的路径(存疑,控制台难道能打印图片?) 。
- DEFAULT_BANNER_LOCATION = "banner.txt":取值是txt文件,猜测是banner文件的默认位置 。
- String[] IMAGE_EXTENSION = { "gif", "jpg", "png" }:取值是常见图片的后缀,结合第二个属性猜测是用来对banner图片类型做限制 。
- DEFAULT_BANNER = new SpringBootBanner():把上节分析的SpringBootBanner当做Banner默认实现类
- ResourceLoader resourceLoader:ResourceLoader简单来说是Spring加载资源的统一抽象,由实现类提供具体逻辑 。
在Spring中读取xml配置文件加载应用上下文的ClassPathXmlApplicationContext,就是ResourceLoader的子类 。 - Banner fallbackBanner:翻译过来是回退banner,暂时猜不出作用,等待后续填坑 。
3、往下看方法,只有两个非私有方法,都是print的重载方法,差别在于第三个参数,分别是Log logger和PrintStream out,代表这两个方法分别负责日志打印和控制台打印 。
推荐阅读
- dota2英文配音启动项 dota2英文配音
- 电动机星三角启动原理接线图 电动机星三角启动
- 手掌启动仪式视频 手掌视频
- 光环战役如何开控制台 光晕战争攻略
- 应用程序无法启动 并行配置不正确
- 将门毒后|《将门毒后》宣发启动,谢景行人选受赞,沈妙一角却被指形象不搭
- u盘bios设置usb启动 bios设置usb启动
- 怎么进入bios设置界面设置u盘启动?怎么进入bios界面?
- 开机启动项怎么设置win11 开机启动项
- 电脑开机启动设置 开机启动设置