SpringApplication setBanner无效的问题
Posted lay2017
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringApplication setBanner无效的问题相关的知识,希望对你有一定的参考价值。
如下两个代码片段:
片段1
1 SpringApplication application = new SpringApplication(SpringBootLearnApplication.class); 2 application.setBanner((environment, sourceClass, out) -> System.out.println("测试banner的设置")); 3 application.run(args);
片段2
1 SpringApplication application = new SpringApplication(); 2 application.setBanner((environment, sourceClass, out) -> System.out.println("测试banner的设置")); 3 application.run(SpringBootLearnApplication.class, args);
两个代码片段的区别在于是在SpringApplication构造方法里面传入,亦或者在run这个方法中传入。
如片段2的做法,在run方法传入,SpringBootLearnApplication.class这个类,会导致setBanner完全等同于失效。
我们点开片段1的run方法:
可以看到该run方法进入的是SpringApplication的成员方法,也就是说我们实例化了该SpringApplication,并且调用了该实例的run方法。
我们再点开片段2的run方法:
和片段1很明显的区别,该run方法是一个静态的。并且在方法内部又new了一次SpringApplication并调用该方法的run。
所以,片段2实际上创建了两个SpringApplication的实例,setBanner方法只是对自己实例化的SpringApplication实例进行设置,从而导致setBanner最后没有任何效果。
我们可以采用片段1中的写法,就不会出现两次实例化
1 SpringApplication application = new SpringApplication(SpringBootLearnApplication.class); 2 application.setBanner((environment, sourceClass, out) -> System.out.println("测试banner的设置")); 3 application.run(args);
或者,如果完全不需要设置任何东西,就直接默认简写
1 SpringApplication.run(SpringBootLearnApplication.class, args);
不论如何最终都将按照这样的顺序执行new SpringApplication() --> run()
以上是关于SpringApplication setBanner无效的问题的主要内容,如果未能解决你的问题,请参考以下文章
springboot情操陶冶-SpringApplication
SpringBoot—启动原理之SpringApplication对象的创建