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/n/304146.html