相信使用过Spring Boot的开发人员,都对Spring Boot的核心模块中提供的SpringApplication类不陌生。SpringApplication类的run()方法往往在Spring应用的入口类中被调用,以启动Spring应用。

1.Spring应用的入口类与SpringApplication类
1) Spring应用的入口类

Spring应用的入口类是Spring应用的配置起点,是配置Spring上下文的起点,往往使用了@SpringBootApplication或@EnableAutoConfiguration等标注类。

在Spring应用的入口类中往往只有一个main()方法,这虽然与标准的Java应用保持了一致,但在有些时候会让开发人员觉得困惑。

在Spring应用的入口类中的main()方法中,往往只是简单地调用Spring Boot的SpringApplication类的run()方法,以启动该Spring应用。

SpringApplication.run(MySpringConfigurationApp.class, args);

其中,第一个参数MySpringConfigurationApp.class就是Spring应用的入口类;第二个参数args是启动Spring应用的命令行参数,该参数可以在Spring应用中被访问(稍后详解)。

2) Spring Boot的SpringApplication类

Spring Boot的SpringApplication类,用以启动一个Spring应用,实质上是为Spring应用创建并初始化Spring上下文。

SpringApplication类的run()方法默认返回一个ConfigurableApplicationContext对象。

  • 2.、SpringApplication类的其他配置

    • banner.txt以定制启动LOGO
    • 禁用LOGO

SpringApplication app = new SpringApplication(MySpringConfigurationApp.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
- 启动过程中的可监听事件
ApplicationStartingEvent
ApplicationEnvironmentPreparedEvent
ApplicationPreparedEvent
ApplicationReadyEvent或ApplicationFailedEvent

3、 增强SpringApplication类的CommandLineRunner接口或ApplicationRunner接口
启动Spring应用后,如果还想进一步执行其他代码,可以定义Spring bean类以实现CommandLineRunner接口或ApplicationRunner接口。

CommandLineRunner接口或ApplicationRunner接口都只提供了唯一的run()方法,该方法将在SpringApplication.run()方法执行结束前被调用。

1) CommandLineRunner接口能够以String数组的形式访问Spring应用的启动参数args

 @Component
public class MyBean implements CommandLineRunner {
public void run(String... args) {
// Do something...
}
}

2) ApplicationRunner接口能够以ApplicationArguments的形式访问应用的参数args

@Component
public class MyBean implements ApplicationRunner{
public void run(ApplicationArguments args) {
// Do something...
}
}

4、 在Spring bean中,通过构造函数访问Spring应用的启动参数args

    @Component
public class MyBean {
@Autowired
public MyBean(ApplicationArguments args) {
boolean debug = args.containsOption("debug");//参数作为命令行中的一个option,如--debug
List<String> files = args.getNonOptionArgs();
// 如果启动参数"--debug logfile.txt",
// 则debug=true, files=["logfile.txt"]
}
}

Spring Boot的SpringApplication类详解的更多相关文章

  1. Spring Boot启动命令参数详解及源码分析

    使用过Spring Boot,我们都知道通过java -jar可以快速启动Spring Boot项目.同时,也可以通过在执行jar -jar时传递参数来进行配置.本文带大家系统的了解一下Spring ...

  2. Spring Boot 之使用 Json 详解

    Spring Boot 之使用 Json 详解 简介 Spring Boot 支持的 Json 库 Spring Web 中的序列化.反序列化 指定类的 Json 序列化.反序列化 @JsonTest ...

  3. Spring boot注解(annotation)含义详解

    Spring boot注解(annotation)含义详解 @Service用于标注业务层组件@Controller用于标注控制层组件(如struts中的action)@Repository用于标注数 ...

  4. Spring Boot Actuator监控使用详解

    在企业级应用中,学习了如何进行SpringBoot应用的功能开发,以及如何写单元测试.集成测试等还是不够的.在实际的软件开发中还需要:应用程序的监控和管理.SpringBoot的Actuator模块实 ...

  5. Spring Boot中@ConditionalOnProperty使用详解

    在Spring Boot的自动配置中经常看到@ConditionalOnProperty注解的使用,本篇文章带大家来了解一下该注解的功能. Spring Boot中的使用 在Spring Boot的源 ...

  6. Spring Boot的启动器Starter详解

    Spring Boot的启动器Starter详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs Spring Boot ...

  7. Spring Boot(八):RabbitMQ详解

    Spring Boot(八):RabbitMQ详解 RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用. 消息中间件在互联网公司的使用中越来越多 ...

  8. Spring Boot admin 2.0 详解

    一.什么是Spring Boot Admin ? Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序. 应用程序作为Spring Boot Admin C ...

  9. spring boot application.properties 属性详解

    2019年3月21日17:09:59 英文原版: https://docs.spring.io/spring-boot/docs/current/reference/html/common-appli ...

随机推荐

  1. 20145324王嘉澜 《网络对抗技术》 MAL_逆向与Bof基础

    实践目标 •本次实践的对象是一个名为pwn1的linux可执行文件. •该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. •该程序同时包含另一个代码片段,get ...

  2. 20145336 张子扬 《网络对抗技术》 web安全基础实践

    2014536 张子扬<网络攻防>Exp9 Web安全基础实践 实验准备 开启webgoat 1)开启webgoat,打开WebGoat: java -jar webgoat-contai ...

  3. jquery hover最后解决 - 不再疑惑 - 例子在这里

    hover具有动画累计的bug, 可以使用 stop 或 filter(:not(:animated))来消除, 但是, 即使这样, 当鼠标反复滑入或滑出的时候, 虽然没有动画累计的问题, 但是 下面 ...

  4. Jackson 使用和注意项

    依赖maven: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId ...

  5. system.data.sqlite的源代码下载

    帮助文档 http://system.data.sqlite.org/index.html/doc/trunk/www/index.wiki 历史版本https://system.data.sqlit ...

  6. NOIP2018 退役记

    NOIP挂完,OI再见 AFO Day 0 早上的高铁,1点多到广州,2点多到酒店,下午就是颓颓颓,然后晚上随便刷了一下板子,反正PJ也没啥板子可以刷 就这样浪费了一天,我到底在干嘛 Day 1 早上 ...

  7. MariaDB学习记录

    MariaDB的学习 MariaDB的学习 关于MariaDB的历史,不再概述 下面是mariadb的官网:https://mariadb.com/ 同样的,MariaDB一样有连接java的jar包 ...

  8. JavaScript权威指南2.词法结构

    字符集 1.用16位的Unicode字符集编写的,可以表示地球上通用的每一种书面语言.国际化 2.每个字符都是用两个字节表示的 3.大小写敏感:关键字.变量.函数名.标识符:HTML并不区分大小写 H ...

  9. java中集合格式及json格式的特点和转换

    作者原创:转载请注明出处 今天在写代码,遇到一个难点,由于要调用webservice接口,返回的为一个list集合内容,从webservice调用接口返回的为一个string的io流, 在调用接口的地 ...

  10. 【咖啡の设备】便携式冰滴壶——Dripo 使用体验

    --------------------------------------------2016.12.22 更新------------------------------------------- ...