• spring boot 源码之banner


    Banner

      使用Spring Boot启动的jar包总是会显示一个Spring的图标。实际我们是可以自定义这个图标。Banner接口定义了打印banner的方法。

    void printBanner(Environment environment, Class<?> sourceClass, PrintStream out);

    SpringApplicationBannerPrinter

      springboot用来创建banner对象的类,核心方法为getBanner即获取Banner对象。

    private Banner getBanner(Environment environment) {
            Banners banners = new Banners();
            banners.addIfNotNull(getImageBanner(environment));
            banners.addIfNotNull(getTextBanner(environment));
            if (banners.hasAtLeastOneBanner()) {
                return banners;
            }
            if (this.fallbackBanner != null) {
                return this.fallbackBanner;
            }
            return DEFAULT_BANNER;
        }

      getImageBanner和getTextBanner方法从相应的位置获取资源,然后使用响应的Banner打印相应资源。

    private Banner getTextBanner(Environment environment) {
            String location = environment.getProperty(BANNER_LOCATION_PROPERTY,
                    DEFAULT_BANNER_LOCATION);
            Resource resource = this.resourceLoader.getResource(location);
            if (resource.exists()) {
                return new ResourceBanner(resource);
            }
            return null;
        }
    
        private Banner getImageBanner(Environment environment) {
            String location = environment.getProperty(BANNER_IMAGE_LOCATION_PROPERTY);
            if (StringUtils.hasLength(location)) {
                Resource resource = this.resourceLoader.getResource(location);
                return (resource.exists() ? new ImageBanner(resource) : null);
            }
            for (String ext : IMAGE_EXTENSION) {
                Resource resource = this.resourceLoader.getResource("banner." + ext);
                if (resource.exists()) {
                    return new ImageBanner(resource);
                }
            }
            return null;
        }

    SpringBootBanner

      SpringBootBanner是Banner的实现类,打印一个spring的图样。

    ResourceBanner

      读取资源,替换占位符,然后打印到相应io。

    public void printBanner(Environment environment, Class<?> sourceClass,
                PrintStream out) {
            try {
                String banner = StreamUtils.copyToString(this.resource.getInputStream(),
                        environment.getProperty("banner.charset", Charset.class,
                                StandardCharsets.UTF_8));
    
                for (PropertyResolver resolver : getPropertyResolvers(environment,
                        sourceClass)) {
                    banner = resolver.resolvePlaceholders(banner);
                }
                out.println(banner);
            }
            catch (Exception ex) {
                logger.warn("Banner not printable: " + this.resource + " (" + ex.getClass()
                        + ": '" + ex.getMessage() + "')", ex);
            }
        }

    ImageBanner

      读取图片资源,然后打印到相应io。

  • 相关阅读:
    设置页面标题title
    路由跳转,页面位置不在顶部
    PyTorch深度学习入门
    删除ubuntu后开机进入grub的解决办法
    研一上英语
    python中常用的几个函数的正确用法-lambda/filter/map/reduce
    【Python教程】 re 模块中findall() 函数返回值展现方式的用法详解
    【Python教程】5种常见字符串去除空格的操作方法
    对python中浅拷贝和深拷贝分析详细介绍
    Git使用
  • 原文地址:https://www.cnblogs.com/zhangwanhua/p/7987647.html
Copyright © 2020-2023  润新知