专业的编程技术博客社区

网站首页 > 博客文章 正文

spring-boot中banner的各种玩法和实现原理详解(二)

baijin 2024-08-15 00:38:26 博客文章 7 ℃ 0 评论

上一篇文章中介绍了spring-boot中的Banner的几种用法,接下来将会详细的介绍Banner的实现原理。

Banner的几种实现

想要实现一个Banner,只需要实现

org.springframework.boot.Banner

这个接口类,在前一篇文章中的自定义Banner就是这么干的。

在这个接口类中只有一个接口需要我们去实现:

我们只需要在这个接口里实现具体的Banner输出就可以了。

三种Banner的实现类关系图:

接下来我们看看这三种Banner都是怎么实现的。


首先我们来看看最简单的默认Banner--SpringBootBanner

代码非常的简单,我们从代码中可以看出一下几个特点:

  • 输出的字符串是被直接保存在字符串数组里的,也不支持修改。
  • 会输出一个srping-boot的版本好
  • 版本号会在第42个字符开始输出
  • ":: Spring Boot ::"字符串会被设置为绿色,版本好会被加粗

看完默认的Banner的实现,接下来就分析文本形式的Banner的实现方式。

下图为ResourceBanner的打印过程:

ResourceBanner中最为核心的部分是能够在文本中使用各种属性,使用的方式为:${property-name}。在ResourceBanner中总共构造了4种属性解释器,用来实现对于不同类型的属性进行文本替换。这4中解释器分别为(优先级由上到下递减):

  • spring-boot的Environment,通过它可以获取到整个spring-boot工程的配置信息。
  • 版本属性解释器,提供了版本属性,总共有一个属性值可以使用:application.version --- 应用版本(如:1.0.0),spring-boot.version --- spring-boot版本(如:2.1.0.RELEASE),application.formatted-version --- 格式化后的应用版本(如: (v1.0.0)),spring-boot.formatted-version --- 格式化后的spring-boot版本(如: (v2.1.0.RELEASE))。
  • Ansi属性解释器,主要用来替换文本格式相关的属性,主要包括背景色、文字颜色、文字样式等内容。
  • 应用title属性解释器,它只提供了一个属性:application.title,属性值是启动类所在包的implTitle。

最后我们在看看ImageBanner的实现。实现的流程:

Banner查找过程

下面一段代码就实现了各种Banner的查找过程:

从代码中可以看到整个查找过程:

先查找ImageBanner和ResourceBanner,并进行合并。如果前两个都没有找到就会使用自定义的Banner,如果还没有找到,就会使用默认的Banner,默认的Banner就是 SpringBootBanner的实例。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表