热门标签 | 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如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • Java环境中Selenium Chrome驱动在大规模Web应用扩展时的性能限制分析 ... [详细]
  • 本文深入解析了Java面向对象编程的核心概念及其应用,重点探讨了面向对象的三大特性:封装、继承和多态。封装确保了数据的安全性和代码的可维护性;继承支持代码的重用和扩展;多态则增强了程序的灵活性和可扩展性。通过具体示例,文章详细阐述了这些特性在实际开发中的应用和优势。 ... [详细]
  • Squaretest:自动生成功能测试代码的高效插件
    本文将介绍一款名为Squaretest的高效插件,该工具能够自动生成功能测试代码。使用这款插件的主要原因是公司近期加强了代码质量的管控,对各项目进行了严格的单元测试评估。Squaretest不仅提高了测试代码的生成效率,还显著提升了代码的质量和可靠性。 ... [详细]
  • Java学习第10天:深入理解Map接口及其应用 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • 《Spring in Action 第4版:全面解析与实战指南》
    《Spring in Action 第4版:全面解析与实战指南》不仅详细介绍了Spring框架的核心优势,如简洁易测试、低耦合特性,还深入探讨了其轻量级和最小侵入性的设计原则。书中强调了声明式编程的优势,并通过基于约定的方法简化开发流程。此外,Spring的模板机制有效减少了重复代码,而依赖注入功能则由容器自动管理,确保了应用的灵活性和可维护性。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 在实际开发中,连接池是最常使用的数据库管理技术之一。连接池通过创建和管理一组预初始化的数据库连接,使得这些连接可以被多个线程复用,从而显著提高应用程序的性能和资源利用率。本文将详细介绍如何从零开始构建一个自定义的 MySQL 连接池,并将其与 Spring Data 进行集成,以实现高效、可靠的数据库操作。 ... [详细]
  • 面向切面编程(AOP)是Spring框架的两大核心概念之一,另一个核心概念是控制反转(IoC)。AOP通过在应用程序中分离横切关注点,如日志记录、事务管理和安全性,从而提高代码的模块化和可维护性。本文将深入探讨AOP的核心概念和术语,帮助读者更好地理解和应用这一重要技术。 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 本文深入探讨了在Spring Boot中处理RESTful风格的表单请求的方法,包括请求参数处理、请求映射以及RESTful设计原则的应用。文章详细介绍了如何利用HTTP动词(如GET、POST、PUT、DELETE)来操作资源,并结合Spring Boot的注解(如@GetMapping、@PostMapping等)实现高效、清晰的请求处理逻辑。通过实例分析,展示了如何在实际项目中应用这些技术,提高开发效率和代码可维护性。 ... [详细]
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社区 版权所有