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

教育学校网站做石家庄seo外包的公司

教育学校网站做,石家庄seo外包的公司,不用fash做的视频网站,南京网站设计制作在文章Springboot3.3.5 启动流程(源码分析)中我们只是粗略的介绍了bean 的装配(Bean的定义)流程和实例化流程分别开始于 finishBeanFactoryInitialization 和 preInstantiateSingletons. 其实,在Spring boot中,Bean 的装配是多阶段的&#xf…

在文章Springboot3.3.5 启动流程(源码分析)中我们只是粗略的介绍了bean 的装配(Bean的定义)流程和实例化流程分别开始于 finishBeanFactoryInitializationpreInstantiateSingletons. 其实,在Spring boot中,Bean 的装配是多阶段的, 复杂的。 本文将从五个方面介绍 bean 的装配和实例化(当然启动过程中还有一些零散的 bean 的创建,这里就不做过多介绍)。

目录

      • 5 个 RootBean 创建流程
      • 应用程序主类bean 创建流程(@SpringBootApplication标注的类)
      • 应用程序其它bean的创建流程
      • AutoConfiguration bean 加载流程
      • 初始化非懒加载的 bean

5 个 RootBean 创建流程

ConfigurationAnnotationProcessorAutowiredAnnotationProcessorCommonAnnotationProcessor EventListenerProcessorEventListenerFactory,这5个 Bean 的创建是随着 AnnotationConfigServletWebServerApplicationContext 的创建而创建的。

在文章 Springboot启动流程之ApplicationContext 创建 可以看到,创建 AnnotationConfigServletWebServerApplicationContext 的同时也创建了 AnnotatedBeanDefinitionReaderClassPathBeanDefinitionScanner. 从名字可以看出一个是用于读取 注解 标注的 bean 定义, 一个用于扫描 类路径下 bean 的定义。

在初始化 AnnotatedBeanDefinitionReader的同时 调用 AnnotationConfigUtils 的方法 registerAnnotationConfigProcessors 注册了以上 5 个bean,以下是源码信息:
在这里插入图片描述
根据以上描述, 整理出其创建时序图如下:
请添加图片描述

应用程序主类bean 创建流程(@SpringBootApplication标注的类)

应用程序主类 bean的创建是在 SpringApplication.prepareContextload 方法中:
在这里插入图片描述

其最终是在BeanDefinitionReaderUtils.registerBeanDefinition 调用 AnnotationConfigServletWebServerApplicationContext .registerBeanDefinition 完成注册:
在这里插入图片描述

SpringBootApplication 标注主类 bean 注册的详细流程如下:
请添加图片描述

应用程序其它bean的创建流程

应用程序其它 bean 的创建起始于 refreshContext 环节,最终通过 ConfigurationClassParse.parse 扫描特定包下面的 bean。
在这里插入图片描述
应用程序 bean 创建流程时序图如下:
请添加图片描述

AutoConfiguration bean 加载流程

在 Springboot 中,一个应用程序通常都需要依赖其它一些组件,而且在应用中我们只需要定义好依赖的组件,我们就能够使用组件提供的服务,这是通过 Spring boot 的自动加载机制实现的。

我们知道,要实现自动加载, 只需要定义好 服务、自动配置类、自动配置条件,然后将自动配置类的完整路径(AutoConfiguration标注的类)放到 resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports (SpringBoot3才支持)文件中即可。

在 Spring boot 源码中,文件 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 是通过 ImportCondidates.load 加载所有的自动配置类的,其详细源码如下:
在这里插入图片描述

同应用程序 bean 一样,自动配置 bean 也是在 refreshContext 环节完成的,其详细流程如下:
请添加图片描述

初始化非懒加载的 bean

在这之前所有需要的 bean 信息就加载完成了,接下来就是初始化所有未初始化的单例 bean (singleton bean)。

在源码中 每个 bean 的初始化是通过反射实现的,其源码如下:
在这里插入图片描述

在springboot 中bean的初始化是多种多样的, 可以是无参构造函数、有参构造函数、工厂方法、自动注入的构造函数等等…, 下面是不分源码:

protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) {...if (args == null) {Supplier<?> instanceSupplier = mbd.getInstanceSupplier();if (instanceSupplier != null) {return obtainFromSupplier(instanceSupplier, beanName, mbd);}}if (mbd.getFactoryMethodName() != null) {return instantiateUsingFactoryMethod(beanName, mbd, args);}...if (resolved) {if (autowireNecessary) {return autowireConstructor(beanName, mbd, null, null);}else {return instantiateBean(beanName, mbd);}}// Candidate constructors for autowiring?Constructor<?>[] ctors = determineConstructorsFromBeanPostProcessors(beanClass, beanName);if (ctors != null || mbd.getResolvedAutowireMode() == AUTOWIRE_CONSTRUCTOR ||mbd.hasConstructorArgumentValues() || !ObjectUtils.isEmpty(args)) {return autowireConstructor(beanName, mbd, ctors, args);}// Preferred constructors for default construction?ctors = mbd.getPreferredConstructors();if (ctors != null) {return autowireConstructor(beanName, mbd, ctors, null);}// No special handling: simply use no-arg constructor.return instantiateBean(beanName, mbd);}

Bean 初始化详细流程如下:
请添加图片描述

总结:

  1. 本文以 AnnotationConfigServletWebServerApplicationContext 为基础,介绍了 一个应用 所需的bean的创建流程。
  2. 从整个启动生命周期来看,refreshContext 结束后所有的bean 都加载好了。
  3. Springboot 中 bean 的创建是多阶段的,复杂的,如果应用依赖于 srpingboot 启动生命周期,一定要关注相关 bean 的创建时机。

Spring boot 启动时 Bean创建流程就介绍完了,希望对各位小伙伴有所帮助。

http://www.hkea.cn/news/822379/

相关文章:

  • 优化好的网站做企业网站百度代理公司
  • 外贸b2c网站如何做推广百度电话人工服务
  • 百度怎样做网站并宣传网站2023上海又出现疫情了
  • wordpress后台登录慢阳山网站seo
  • 深圳网站建设企网络推广运营途径
  • 给自己女朋友做的网站yandex搜索引擎
  • 购物网站建设教程怎么在网上做广告宣传
  • 冠县做网站推广网站怎么制作
  • 开封 网站建设苹果被曝开发搜索引擎对标谷歌
  • 东莞虎门高铁站百度客户端电脑版下载
  • 建网站怎么挣钱的学seo推广
  • 自如网站做的好 服务哪个网站学seo是免费的
  • 国外网站阻止国内访问怎么做竞价推广工具
  • 建设一个网站需要哪些方面的开支百度人工客服
  • 品牌网站建设-建站之路最新疫情新闻100字
  • 东莞网站优化科技有限公司怀柔网站整站优化公司
  • 郑州网站建设联系方式外链是什么意思
  • 用wordpress做网站教程电脑优化大师有用吗
  • 佛山企业网站制作今日热点新闻事件
  • 企业网站网络推广黑帽seo培训
  • 欧美做的爱爱网站有哪些广告推广赚钱
  • 泉州网站建设工作室谷歌seo价格
  • 国建设委员会网站百度推广一天烧几千
  • 做网站 花园路国贸营销推广方案包括哪些内容
  • 做商城网站哪里买口碑营销属于什么营销
  • 鞋子 东莞网站建设真正的免费建站在这里
  • 网站上微信的链接怎么做项目平台
  • 做网站后有人抢注关键词网络营销方案策划论文
  • 苏州网站建设网站seo优化的方法
  • 设计网装修seo顾问服