spirng底层实现原理

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

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

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

  一:首先了解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对象之间的关系,然后建立并进行维护)所需要的工具。简单说就是Util

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

1、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的底层实现原理就更新到这里。错误的地方请多指正。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java进阶干货

一说项目就spring,你真的懂spring么?

因此,你会发现,造一辆车需要层层嵌套零部件的生产逻辑而成,使得这家工厂需要面面俱到,而且要级级紧扣,每一个步骤都需要等待前一个步骤完成,这就造成这个家工厂效率低...

641
来自专栏技术点滴

抽象工厂模式(Abstract Factory)

抽象工厂模式(Abstract Factory) 抽象工厂模式(Abstract Factory)[Kit] 意图:提供一个创建一系列相关或相互依赖对象的接口,...

18410
来自专栏Java Web

Spring学习(1)——快速入门

认识 Spring 框架 Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of ...

4605
来自专栏二进制文集

思维导图学 《Java编程思想》

没想到会有很多人留言要这个思维导图,一一回复有点累,放在 Github 上,方便大家下载。欢迎交流求`Star`

593
来自专栏Java面试笔试题

什么是DAO模式?

DAO(Data Access Object)顾名思义是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据访...

802
来自专栏行者悟空

将SparkSQL计算结果写入Mysql中

804
来自专栏Java架构沉思录

聊聊设计模式之代理模式

前言 代理模式的目的是提供一个代理来控制对一个对象的访问。那么,我们为什么需要控制对一个对象的访问呢?或者说控制对一个对象的访问有什么好处呢?在日常工作中,大...

2575
来自专栏编程

反序列化漏洞屡被黑客利用,危害巨大,代码怎样写才安全?

反序列化漏洞出现很久了,一直到现在都很流行,以致OWASP组织将“不安全的反序列化”列为2017年10项最严重的Web 应用程序安全风险榜的第8位。 就在201...

2069
来自专栏精讲JAVA

用 Maven 实现一个 protobuf 的 Java 例子

Protocal Buffers(简称protobuf)是谷歌的一项技术,用于结构化的数据序列化、反序列化,常用于RPC 系统(Remote Procedure...

892
来自专栏aoho求索

比较Spring AOP与AspectJ

本文翻译自Comparing Spring AOP and AspectJ(http://www.baeldung.com/spring-aop-vs-aspe...

3438

扫码关注云+社区