spirng底层实现原理

  什么是框架?框架解决的是什么问题?
web

  编程有一个准则,Don't Repeat Yourself(不要重复你的代码),因此咱们会将重复的代码抽取出来,封装到方法中;若是封装的方法过多,将将这些方法封装成工具类;若是工具类造成了规模,就整合成类库。类库更加系统,功能更加齐全。既然别人已经造好了轮子,咱们为何还有闭门造车呢,直接把造好的轮子拿来用就好了。这就有了框架的诞生。 spring

 框架就是一个半成品组件,将底层的代码,重复的代码封装,暴露接口给用户使用。让用户只关心业务逻辑功能,并不须要关注底层代码的实现,在必定程度上简化了开发,提升软件开发的效率。编程

  一:首先了解Spring的架构图设计模式

  

 

 图中能够看出,spring的三个核心组件是:core bean,context,下面就每个组件进行详细的介绍。数据结构

二:那么spring到底解决的是什么问题呢?架构

  spring解决的是将对象之间的依赖关系交由配置文件统一管理,也就是依赖注入机制,注入关系在IOC容器中管理。IOC又是什么呢?就是bean包装的对象。spring就是经过bean完成对这些对象的管理以及一些额外的功能目的。spring的设计策略和Java中的OOP类似,可是较之复杂的多。首先建立一系列数据结构,而后根据数据结构设计生存环境,让数据结构在生存环境中不停的运动,在运动的过程当中与环境或者其余个体完成信息交换。其余的框架用到的都是这样的设计准则。框架

三:各个组件之间如何协同工做?工具

  Bean包装的是Object对象,而Object对象中保存的是数据,而后Context为这些数据提供生存环境。对于Context来讲就是发现每一个Bean之间的关系,而且创建和维护这种关系。因此说Context就是Bean对象的集合,这个集合就是IOC容器,一旦创建IOC容器,就可让spring为咱们工做了。而Core就是完成这一系列工做(查找bean对象之间的关系,而后创建并进行维护)所须要的工具。简单说就是Utilspa

四:下面详细介绍各个组件设计

一、Bean组件:bean组件是位于spring的Beans包下面。完成的主要功能是:Bean定义。Bean解析,Bean的建立。咱们只须要关注Bean的建立,另外两个spring框架已经自动完成了。Bean的建立是典型的工厂模式

 

 Bean的定义的类层次结构图:

Bean的解析过程十分复杂。由上面的类层次结构图也能够看出,同时每一个bean解析也被划分的十分细。bean的解析就是spring配置文件的解析。

 

 2.Context组件:主要是提供Bean的运行环境。保证各个对象之间的状态。做为Spring容器的IOC容器,整合了spring的大部分功能。

 ApplicationContext是Context的顶级父类。要完成的工做:(1)表示一个应用环境 (2)调用BeanFactory建立Bean对象(3)保存对象关系表(4)捕获各类事件  

  ApplicationContext的子类主要包括两个方面。

  1. ConfigurableApplicationContext:表示能够修改Context,在建立Context对象时,用户能够动态的修改或者添加配置文件的信息。
  2. WebApplicationContext:能够直接访问ServletContext对象,是专门为web准备的Context

  

3.Core组件:Core做为spring的核心,一个重要组成部分就是定义了资源的访问方式。巧妙之处就在于:将全部的资源抽象成一个接口的设计模式

 

 五:spring之IOC容器的实现过程

IOC容器中做为管理bean关系的容器,究竟是如何工做的呢?

1.建立BeanFactory工厂 

 

2.注册感兴趣的事件

3.建立Bean实例对象 是在finishBeanFactoryInitiallization中开始的。

 

4.触发被监听的事件

 

 六:spring之AOP

spring的AOP的实现依赖动态代理技术,首先介绍动态代理,建立代理对象的源码

spring中的Aop到底如何实现的?

依赖动态代理,代理的目的是调用目标方法是能够转为调用InvokeHandler中的invoke方法,spring的aop遵循aop联盟,在此基础上有进行了拓展,增长了pointcut和advisor等一些接口使得使用更加灵活。

 

spring中代理模式的使用

 

 关于spring的底层实现原理就更新到这里。错误的地方请多指正。

 个人博客即将搬运同步至腾讯云+社区,邀请你们一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=37c7e7zxm36ss

相关文章
相关标签/搜索