Spring Boot是當今最受歡迎的Java微服務框架之一,SpringApplicationBuilder是其中一個比較重要的組件,它是Spring Boot應用程序的構建器,用於構建Spring Boot上下文、註冊bean和配置Spring Boot特性。在本文中,我們將深入研究SpringApplicationBuilder,從多個方面對它進行詳細的闡述。
一、SpringApplicationBuilder的基本介紹
SpringApplicationBuilder是Spring Boot應用程序的構建器,是一個鏈式API,可以用於構建Spring Boot上下文、註冊bean和配置Spring Boot特性。
以下是一個簡單的Spring Boot應用程序實例代碼:
@SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
SpringApplication.run()方法用來運行Spring Boot應用程序,它需要兩個參數:啟動類MyApplication.class和運行參數args。SpringApplication.run()方法內部會創建一個SpringApplicationBuilder對象來構建Spring Boot上下文。
下面是一個Spring Boot應用程序的構建過程:
public static ConfigurableApplicationContext run(Class primarySource, String... args) { return new SpringApplication(primarySource).run(args); } public SpringApplication(Object... sources) { this(null, sources); } public SpringApplication(ResourceLoader resourceLoader, Class... primarySources) { this.resourceLoader = resourceLoader; Assert.notNull(primarySources, "PrimarySources must not be null"); this.primarySources = new LinkedHashSet(Arrays.asList(primarySources)); this.webApplicationType = WebApplicationType.deduceFromClasspath(); } public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context = null; Collection exceptionReporters = new ArrayList(); configureHeadlessProperty(); SpringApplicationRunListeners listeners = getRunListeners(args); listeners.starting(); try { ApplicationArguments applicationArguments = new DefaultApplicationArguments(args); ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments); configureIgnoreBeanInfo(environment); Banner printedBanner = printBanner(environment); context = createApplicationContext(); exceptionReporters = getSpringFactoriesInstances(SpringBootExceptionReporter.class, new Class[] {ConfigurableApplicationContext.class}, context); prepareContext(context, environment, listeners, applicationArguments, printedBanner); refreshContext(context); afterRefresh(context, applicationArguments); stopWatch.stop(); if (this.logStartupInfo) { new StartupInfoLogger(this.mainApplicationClass).logStarted(getApplicationLog(), stopWatch); } listeners.started(context); callRunners(context, applicationArguments); } catch (Throwable ex) { handleRunFailure(context, ex, exceptionReporters, listeners); throw new IllegalStateException(ex); } try { listeners.running(context); } catch (Throwable ex) { handleRunFailure(context, ex, exceptionReporters, null); throw new IllegalStateException(ex); } return context; }
Spring Boot應用程序的構建可以細分為以下幾個步驟:
- 創建SpringApplication對象
- 設置應用程序啟動類和運行參數
- 創建SpringApplicationBuilder對象
- 使用SpringApplicationBuilder構建Spring Boot上下文
- 準備配置環境、列印banner和創建ApplicationContext對象
- 刷新ApplicationContext
- 啟動Spring Boot應用程序
二、SpringApplicationBuilder的鏈式調用
SpringApplicationBuilder是一個鏈式API,可以通過鏈式調用來配置Spring Boot應用程序。下面是一個鏈式調用實例:
new SpringApplicationBuilder() .sources(MyApplication.class) .bannerMode(Banner.Mode.OFF) .web(WebApplicationType.NONE) .run(args);
在這個例子中,我們指定了啟動類、關閉banner和設置應用程序類型為非Web類型。該代碼等價於以下代碼:
SpringApplicationBuilder builder = new SpringApplicationBuilder(); builder.sources(MyApplication.class); builder.bannerMode(Banner.Mode.OFF); builder.web(WebApplicationType.NONE); builder.run(args);
鏈式調用可以簡化代碼,使代碼更加清晰易懂。
三、SpringApplicationBuilder的父子關係
SpringApplicationBuilder支持父子關係,可以用於構建多個應用程序上下文之間的依賴關係。下面是一個父子關係的代碼示例:
SpringApplicationBuilder parentBuilder = new SpringApplicationBuilder(ParentApplication.class); parentBuilder.child(Application1.class).run(args); parentBuilder.child(Application2.class).run(args);
在上面的示例中,我們首先創建了一個父SpringApplicationBuilder,然後通過child()方法創建了兩個子SpringApplicationBuilder,並且使用run()方法來啟動這兩個子應用程序。
四、SpringApplicationBuilder的高級應用
1. 添加自定義屬性
我們可以通過properties()方法將自定義屬性添加到應用程序上下文中:
new SpringApplicationBuilder(MyApplication.class) .properties("my.property=value") .run(args);
在上面的示例中,我們向上下文中添加了一個名為my.property的屬性,值為value。
2. 添加多個啟動類
我們可以通過sources()方法添加多個應用程序啟動類:
new SpringApplicationBuilder(MyApplication.class, AnotherApplication.class) .run(args);
在上面的示例中,我們同時使用MyApplication.class和AnotherApplication.class兩個啟動類。
3. 添加配置類
我們可以通過initializers()方法配置應用程序初始器:
new SpringApplicationBuilder(MyApplication.class) .initializers(new MyInitializer()) .run(args);
在上面的示例中,我們通過MyInitializer類來配置應用程序。
4. 自定義日誌記錄器
我們可以通過logback.xml等方式自定義日誌記錄器。下面是一個自定義日誌記錄器的示例:
new SpringApplicationBuilder(MyApplication.class) .logStartupInfo(false) .web(WebApplicationType.NONE) .bannerMode(Banner.Mode.OFF) .run(args);
在上面的示例中,我們禁用了日誌記錄器和關閉了應用程序。
總結
SpringApplicationBuilder是Spring Boot應用程序的構建器,是一個鏈式API,可以用於構建Spring Boot上下文、註冊bean和配置Spring Boot特性。在本文中,我們學習了SpringApplicationBuilder的基本介紹、鏈式調用、父子關係和高級應用。
完整的代碼示例:
@SpringBootApplication public class MyApplication { public static void main(String[] args) { new SpringApplicationBuilder() .sources(MyApplication.class) .bannerMode(Banner.Mode.OFF) .web(WebApplicationType.NONE) .run(args); } }
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/304146.html