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

 

 

 返回完整对象

 

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

 



推荐阅读
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 题库来源:安全生产模拟考试一点通公众号小程序G3锅炉水处理报名考试是安全生产模拟考试一点通生成的,G3锅炉水处理证模拟考试题库是根据G3锅炉水处理最新 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文介绍如何在 Unity 的 XML 配置文件中,将参数传递给自定义生命周期管理器的构造函数。我们将详细探讨 CustomLifetimeManager 类的实现及其配置方法。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
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社区 版权所有