SpringBoot启动的时候会打印了默认在resource下面banner.txt里面的内容,突然好奇,就大概看下源码,记个笔记,比较简单.
首先,banner有个开关:
SpringApplication springApplication = new SpringApplication(RunApplication.class);
//控制台打印
// springApplication.setBannerMode(Banner.Mode.CONSOLE);
//关闭
springApplication.setBannerMode(Banner.Mode.OFF);
springApplication.run(args);
Mode对应的枚举比较简单:
OFF,
CONSOLE,
LOG;
然后点到run方法里面去,一眼看见printBanner字样:
点到this.printBanner方法里面去:
在一开始设置的开关那里,set方法赋值进去了, springApplication.setBannerMode(Banner.Mode.OFF);如果为OFF就不打印:
如果开启的话,就先获得资源加载器ResourceLoader,ResourceLoader内部默认是以classpath:开头的,所以,我们只需要在resource下面创建banner.txt即可.
然后根据加载器和打印的Model枚举初始化SpringApplicationBannerPrinter,这个类就是打印banner的具体类了,然后主要打印方法就是print方法,其他方法就是获取不同的banner,然后再下面的静态内部类,我也不是很懂,希望大佬留言教教我…然后打印就两个方法,一个日志打印,一个流打印.
然后日志打印的话,就根据createStringFromBanner这个方法获取Stirng字符串,然后日志打印,
控制台输出的话,就是根据先根据环境获取对应的Banner,实现Banner(里面就打印方法)接口主要一个图片banner,和资源banner,这里应该是ResourceBanner资源banner,然后调用ResourceBanner里面的printBanner方法.,里面就有我们熟悉的 System.out.println()了.
中间一些PropertyResolver我感觉应该是做一些解析,但具体,也不是很懂,萌新希望大佬留言指点指点.以上就是springboot加载banner图片的大概流程.然后,那我们自己想实现一个简单的打印banner呢?那就解析banner.txt文件转换为字符串,然后直接打印出来即可.
可以写在启动完成之后,也可以写在之前,就是读取文件,转为String打印出来…
在线生成banner图:https://www.bootschool.net/ascii/