相信使用過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"]
}
}
參考連結:
http://docs.spring.io/spring-boot/docs/1.5.4.RELEASE/reference/htmlsingle/