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對象。

  • 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"]  
      }  
    }  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM