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
微信掃一掃
支付寶掃一掃