热门标签 | 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方法

 

 

 返回完整对象

 

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

 



推荐阅读
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
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社区 版权所有