天天看點

Spring Boot的SpringApplication類詳解

相信使用過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對象。

Spring Boot的SpringApplication類詳解

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/

繼續閱讀