N. *_*ikh 5 java spring spring-boot
在 Sprint Boot 中,Spring 应用程序是通过在 main 方法中调用 SpringApplication.run(*.class, args) 来初始化的。我想知道运行中传递的 *.class 引用的目的是什么?
在查看了源代码之后,我并不清楚为什么需要这样做。
package org.java.simpleapp.simpleapp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SimpleApplication {
public static void main(String[] args) {
SpringApplication.run(SimpleApplication.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
通过启动Application类,我们可以完成Spring初始化、自动组装等一系列操作。启动过程通过两个入口点:@SpringBootApplication和SpringApplication.run
1.进入方法:
一个静态帮助器,可用于使用默认设置从指定源运行 SpringApplication,其中primarySource 是要加载的主要源,args 应用程序参数(通常从 Java 主方法传递),这会导致运行 ApplicationContext
public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
return run(new Class<?>[] { primarySource }, args);
}
Run Code Online (Sandbox Code Playgroud)
调用静态run方法后,通过一系列的调用我们最终会进入到Spring Application类中的如下位置
正如你所看到的,这个方法做了两件事,初始化 Spring Application 类,并调用内部公共 run 方法。
2. Spring应用程序初始化
运行 Spring 应用程序,创建并刷新一个新的 ApplicationContext,其中参数 args 是返回正在运行的 ApplicationContext 的应用程序参数(通常从 Java 主方法传递)
public ConfigurableApplicationContext run(String... args) {
...
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);
}
...
}
Run Code Online (Sandbox Code Playgroud)
run ()负责管理上下文、环境、侦听器、applicationArguments、printedBanner,正如我们在
prepareContext(context, environment, listeners, applicationArguments, printedBanner);
Run Code Online (Sandbox Code Playgroud)
您可能想在这里探索更多细节 启动流程源码分析
| 归档时间: |
|
| 查看次数: |
1943 次 |
| 最近记录: |