当前位置: 首页 > wzjs >正文

做网站后台运营这个工作怎么样wordpress粉色主题

做网站后台运营这个工作怎么样,wordpress粉色主题,微信开放品牌,百度联盟怎么看广告赚钱Spring Boot启动流程及源码实现深度解析 一、启动流程概述 Spring Boot的启动流程围绕SpringApplication类展开,核心流程可分为以下几个阶段: 初始化阶段:推断应用类型,加载ApplicationContextInitializer和ApplicationListene…

Spring Boot启动流程及源码实现深度解析

一、启动流程概述

Spring Boot的启动流程围绕SpringApplication类展开,核心流程可分为以下几个阶段:

  1. 初始化阶段:推断应用类型,加载ApplicationContextInitializerApplicationListener
  2. 环境准备:加载配置文件和命令行参数
  3. 上下文创建:实例化ApplicationContext
  4. 上下文刷新:执行refresh()方法完成Bean加载
  5. 后置处理:执行CommandLineRunnerApplicationRunner

二、源码解析

1. 入口类

@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

2. SpringApplication初始化

// SpringApplication.java
public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {return new SpringApplication(primarySource).run(args);
}public SpringApplication(Class<?>... primarySources) {this(null, primarySources);
}private SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {this.resourceLoader = resourceLoader;this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));this.webApplicationType = WebApplicationType.deduceFromClasspath(); // 推断应用类型setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class)); // 加载InitializerssetListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class)); // 加载Listenersthis.mainApplicationClass = deduceMainApplicationClass();
}

关键步骤解析

  • deduceFromClasspath()通过类路径判断应用类型(Servlet/Reactive/None)
  • META-INF/spring.factories加载初始化器和监听器

3. run()方法核心流程

public ConfigurableApplicationContext run(String... args) {StopWatch stopWatch = new StopWatch();stopWatch.start();ConfigurableApplicationContext context = null;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();context.setEnvironment(environment);// 准备上下文prepareContext(context, environment, listeners, applicationArguments, printedBanner);// 刷新上下文(核心)refreshContext(context);// 后置处理afterRefresh(context, applicationArguments);stopWatch.stop();// 发布启动完成事件listeners.started(context);callRunners(context, applicationArguments);} catch (Throwable ex) {handleRunFailure(context, ex, listeners);throw new IllegalStateException(ex);}listeners.running(context);return context;
}

三、关键阶段详解

1. 环境准备(prepareEnvironment)

private ConfigurableEnvironment prepareEnvironment(SpringApplicationRunListeners listeners,ApplicationArguments applicationArguments) {ConfigurableEnvironment environment = getOrCreateEnvironment();configureEnvironment(environment, applicationArguments.getSourceArgs());ConfigurationPropertySources.attach(environment);listeners.environmentPrepared(environment); // 发布环境准备事件bindToSpringApplication(environment);return environment;
}
  • 加载application.properties/yml文件
  • 处理命令行参数--开头的参数
  • 触发ApplicationEnvironmentPreparedEvent事件

2. 上下文创建(createApplicationContext)

根据应用类型创建不同的上下文:

protected ConfigurableApplicationContext createApplicationContext() {return this.applicationContextFactory.create(this.webApplicationType);
}// 默认实现
ApplicationContextFactory DEFAULT = (webApplicationType) -> {try {switch (webApplicationType) {case SERVLET:return new AnnotationConfigServletWebServerApplicationContext();case REACTIVE:return new AnnotationConfigReactiveWebServerApplicationContext();default:return new AnnotationConfigApplicationContext();}} catch (Exception ex) {throw new IllegalStateException(...);}
};

3. 上下文刷新(refreshContext)

private void refreshContext(ConfigurableApplicationContext context) {refresh(context);if (this.registerShutdownHook) {try {context.registerShutdownHook();} catch (AccessControlException ex) {// Not allowed in some environments.}}
}protected void refresh(ApplicationContext applicationContext) {((AbstractApplicationContext) applicationContext).refresh();
}

最终调用AbstractApplicationContext.refresh(),这是Spring容器的核心方法:

public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {prepareRefresh();ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();prepareBeanFactory(beanFactory);// ... [省略其他步骤]finishRefresh(); // 触发ContextRefreshedEvent}
}

四、关键扩展点

1. ApplicationContextInitializer

public interface ApplicationContextInitializer<C extends ConfigurableApplicationContext> {void initialize(C applicationContext);
}
  • 执行时机:上下文准备阶段(prepareContext)
  • 配置方式:通过spring.factoriesSpringApplication.addInitializers()

2. ApplicationRunner/CommandLineRunner

@Component
public class DemoRunner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) {// 应用启动后执行}
}
  • 执行顺序:通过@Order注解控制
  • 执行时机:上下文刷新完成后

五、总结

Spring Boot的启动流程通过智能的自动配置和扩展机制,显著简化了Spring应用的初始化过程。理解其核心流程和关键扩展点,可以帮助开发者:

  1. 深入排查启动过程中的问题
  2. 实现自定义的初始化逻辑
  3. 优化应用启动性能
  4. 扩展框架的核心功能

建议结合源码调试工具,通过断点跟踪SpringApplication.run()的执行过程,可以更直观地理解各阶段的实现细节。


流程图文字描述

main()
└─▶ SpringApplication.run()├─▶ 初始化应用类型和扩展组件├─▶ 准备环境(加载配置)├─▶ 创建ApplicationContext├─▶ 准备上下文(Bean定义加载)├─▶ 刷新上下文(Bean初始化)├─▶ 执行Runner接口└─▶ 完成启动

通过以上分析,读者可以系统地掌握Spring Boot的启动机制及其实现原理。实际开发中可结合具体需求,合理使用扩展点进行定制化开发。

http://www.dtcms.com/wzjs/827526.html

相关文章:

  • 网站购物车设计跨越物流公司官网
  • 公司部门解散员工赔偿中国优化网
  • 校园网站建设系统设计服务器怎么做看视频的网站
  • asp 大型网站开发开发网站公司地址
  • flash网站系统公众号商城怎么开
  • 记事本做网站怎么插图软文营销推广
  • wordpress 图片站软件开发工程师薪资待遇
  • 上海模板网建站移动网站怎么做
  • 团购网站怎么做企业网站建设效益分析
  • ui设计师作品集网站免费网站建设垂询186 6159 6345
  • 无锡专业做网站的公司哪家好深圳市住房和建设局门户网站
  • 萧山做网站的企业上海巴士公司
  • 建设网站需要哪个语言编译器管理课程培训视频教程全集
  • 网络推广需要花多少钱引擎优化
  • 门户网站的自身的特性市场营销策略的概念
  • 网站关闭申请书中国手机网站
  • 推荐几个没封的网站2021货源一件代发从哪里找
  • 石家庄企业商城版网站建设做优化关键词
  • 网站制作公司怎么收费wordpress食品模板下载
  • 公司手机网站建设公司工程机械网
  • 深圳建设工程交易服务网站个人网站成品下载
  • 网站流量数据分析互联网开发技术有哪些
  • 网站建设 服务流程网站公司深圳
  • 昆明网站建设公司哪里有市场营销培训班
  • 响应式网站建设系统开票开网站建设费
  • 百度搜索引擎网站京北网app下载
  • 柳州市建设投资开发公司网站何苦做游戏网站
  • 万网网站模板购买大气装饰公司网站源码
  • 免费国外网站北京广告设计制作公司
  • 濮阳网站建设电话asp婚纱摄影网站