热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AbstractAppliactionnContext里面方法refresh方法

1我们加载配置文件到BeanFactory容器中那么首先我们需要创建beanFactory容器  进入构造方法 super 调用父类构造方法 准备初始化资源对象setConfigL

1 我们加载配置文件 到 BeanFactory容器中
那么首先我们需要创建beanFactory容器

 

 进入构造方法

 

super  调用父类构造方法  准备初始化资源对象

setConfigLocations  加载配置文件(文件路径)

refresh()  里面包含13个方法  spring核心方法

 

 

1 准备刷新 做容器刷新前准备工作(标志位和启动时间,初始化属性资源null,获取环境资源属性,存储预刷新容器的监听器null)

 

 

1.1设置标志位和启动时间

 

1.2 初始化属性资源  为了子类实现扩展  目前什么都没有实现(在springMVC时 会出现响应扩展操作)

 

 

 

1.3  获取环境资源属性 包含了系统属性值和变量值  并且验证属性资源

 

 

1.4 存储预刷新容器的监听器

 

 

---

 2 获得一个刷新的beanFactory 容器(defaultListableBeanFactory)  加载xml配置文件的属性值到当前工厂中

具有继承关系的接口

   beanFactory子接口  能够枚举所有bean实例

 

  当前beanFactory 想要他可以参加配置 必须要实现对应的接口

 

 

 

告诉子类刷新beanFactory

 

 

如果有beanFactory 了 就先销毁掉 关闭掉beanFactory

 

 

创建一个新的beanFactory

 

 

而创建beanFactory 是  defaultListableBeanFactory

 

 

 创建完工厂之后 设置序列化id 和 定制beanFactroy

 

定制话beanFactory 信息里面设置了 允许bean定义信息被覆盖  允许循环依赖

 

 

解析xml文件

 

 

这里的configLocations 在之前刚进入refresh之前 设置配置文件的路径

 

 

当执行这一步的时候 就可以将配置文件读取到beanFactory中

 

 

 

 

 此时将xml文件中的标签解析成了map对象

----------

3  初始化beanFactory  (因为上一步刚创建了beanFactory 里面很多都是默认值)

 

3.1 设置bean的类加载器

 

 

 3.2 设置解析配置文件的 解析器 spel

 

 3.3  添加资源加载器

 

 3.4 添加beanPostProcessor 增强器

 

3.5 忽略这些Aware接口 不进行解析操作(因为此时还没有初始化完成  会在后面设置Aware接口做统一处理)

 

 

3.6  处理依赖

 

 

3.7 添加bean的增强器

 

 

 -----------------

4 执行后置处理器的相关操作(null 方便扩展操作)

 

 5 执行 BeanFactoryPostProcessors  实例化 并且 执行 所有注册过的 beanFactoryPostProcessor  单例对象在初始化之前必须被调用(beanFactory 容器对象)  实例化之后 在修改beanDefinition没有意义

 

 6. 在当前bean创建之前我们需要  实例化并且注册 所有beanPostProcessor 实例  提前准备好beanPostProcessor 需要准备的东西

 

 7 初始化消息资源 (国际化设置)

 

 8 初始化应用程序事件的广播器

 

 9 留给子类执行扩展工作

 

 10  注册监听器

 

 11  实例化所有的非懒加载单例对象(实例化操作)

 

 11.1 将beanDefinitionNames中的 bean名称放入ArrayList中

 

11.2循环创建单例对象 

 

 

11.2.1返回一个合并好的rootBeanDefinition 对象  遍历他们的父beanDefinition  也就是整合父类和子类的beanDefinition

 

11.2.2判断这个类是否实现了 beanFactory这个接口   因为我们创建的类并没有实现beanFactory这个接口

11.2.3那么执行

 

11.2.3.1 获取bean名称

 

 

 11.2.3.2 每次创建对象之前 我们需要判断1.2.3级缓存是否包含此对象 如果包含 直接从缓存中取 如果不包含 再创建对象

先检查一级缓存是否存在person 对象

 

 

 

 

 

 

 如果一级缓存没有  那么执行创建对象  因为此时shareInstance为null  所以 执行eles

 

 

 

 

创建bean实例

 

 

填充属性

 

bean实现了Aware接口的话 就会把属性填充进去  当前bean没有实现awre接口

 

执行BeanPostProcessorBeforeInitlization方法

 

 执行init-method 方法

 

 

执行BeanPostProcessorAfterInitlization方法

 

 

 返回完整对象

 

当容器关闭时  我们需要销毁该对象

 



推荐阅读
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 处理docker容器时间和宿主机时间不一致问题的方法
    本文介绍了处理docker容器时间和宿主机时间不一致问题的方法,包括复制主机的localtime到容器、处理报错情况以及重启容器的步骤。通过这些方法,可以解决docker容器时间和宿主机时间不一致的问题。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了在Docker容器技术中限制容器对CPU的使用的方法,包括使用-c参数设置容器的内存限额,以及通过设置工作线程数量来充分利用CPU资源。同时,还介绍了容器权重分配的情况,以及如何通过top命令查看容器在CPU资源紧张情况下的使用情况。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
author-avatar
mobiledu2502898543
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有