述
上文中,分析了Spring容器的 refresh 流程,还有 Bean 的实例化流程,本文来了解一下 Spring Boot 中的 Banner 的解析,还有他的原理
自定义Banner
Spring Boot 默认的 Banner 图如下:
1
2
3
4
5
6
7 . ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.4.RELEASE)
这里就是一个 Spring 的字符画,加上Spring Boot的版本号, 我们可以把这个图换成我们自定义的一些文字或者图片
文字Banner
1 | // .::::. |
比如我们要在项目中,把Banner换成上面这个,只需要在项目的 Resource
目录下新建一个 Banner.txt
, 然后复制进去就可以了
这里名称默认的就是 Banner.txt
, 如果名称不是这个的话, 比如是 MyBanner.txt
,就需要在 application
配置文件中做以下设置1
2
3spring:
banner:
location: MyBanner.txt
图片banner
Spring Boot 支持 gif
,jpg
,png
这三种格式的图片banner, 打印的时候会将图片转换成一些字符画来输出, 设置方法和文字的banner的是一样的,默认的图片名称也是 Banner
,然后如果名称不是默认名称的话,也是通过修改 application
配置文件指定,配置如下:1
2
3
4spring:
banner:
image:
location: xxx.jpg
对于图片banner,还有一些其他的设置,比如图片的长宽等,都是通过 spring.banner.image.*
来配置的
兜底banner
兜底banner,就是上面两种方式都找不到的情况下,会输出的,这个需要通过硬编码的方式设置, 修改项目启动类,如下:1
2
3
4
5
6
7
8@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(App.class);
springApplication.setBanner(new ResourceBanner(new ClassPathResource(",MyBanner.txt")));
springApplication.run(args);
}
}
这里通过 springApplication.setBanner()
这个方法去设置
关闭banner
如果不想输出任何的banner,也可以通过配置关闭, application
配置文件中配置如下:1
2
3spring:
main:
banner-mode: off
这里可以配置的值,一共是三种:
- off: 关闭banner
- console: 控制台打印
- log: 打印到日志文件
banner解析原理
了解了如何替换banner之后,来了解以下他的原理,banner是如何被 Spring Boot 识别并且打印的
首先进入run方法,找到打印banner的方法,如下:
点进去
这里不管是log方式还是console的方式,调用的方法其实都是一样的,只是传入的参数不一样,继续点进去往下看
这里分为两步,先获取,然后打印
获取Banner
进入 getBanner()
方法,如下:
然后图片和文字banner的获取如下:
打印Banner
上面一步,获取到banner之后,就调用他的打印方法
这里可能获取到的是我们配置的banner,也可能是 Spring Boot 的默认的banner,也就是 SpringBootBanner
这个类,先来看一下默认的,点进去
然后进入默认的 SpringBootBanner
然后再来看一下文字类型的 banner 的打印, 进入 ResourceBanner
如下:
最后是图片类型的 banner ,进入 ImageBanner
总结
到这儿,就了解了banner的自定义配置,以及他们是如何被解析出来并打印的,这部分比较简单,用处其实也不大,大致了解了就可以了