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

  编程有一个准则,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的底层实现原理就更新到这里。错误的地方请多指正。

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

转载于:https://www.cnblogs.com/shuai-server/p/9011334.html

spirng底层实现原理相关推荐

  1. Java并发机制的底层实现原理

    Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令.本章我们将 ...

  2. HashMap底层实现原理,红黑树,B+树,B树的结构原理,volatile关键字,CAS(比较与交换)实现原理

    HashMap底层实现原理,红黑树,B+树,B树的结构原理,volatile关键字,CAS(比较与交换)实现原理 首先HashMap是Map的一个实现类,而Map存储形式是键值对(key,value) ...

  3. Spring AOP概述及底层实现原理

    Spring AOP概述及底层实现原理 aop概述 AOP全称为Aspect Oriented Programming的缩写,意为:面向切面编程.将程序中公用代码进行抽离,通过动态代理实现程序功能的统 ...

  4. java底层原理书籍_阿里面试题:Java中this和super关键字的底层实现原理

    知道的越多,不知道的就越多,业余的像一棵小草! 编辑:业余草 来源:https://www.xttblog.com/?p=5028 B 站:业余草 最近一个粉丝加我说,接到了阿里的面试,问问我阿里会面 ...

  5. Spring(二)IOC底层实现原理

    IOC原理 将对象创建交给Spring去管理. 实现IOC的两种方式 IOC配置文件的方式 IOC注解的方式 IOC底层实现原理 底层实现使用的技术 1.1 xml配置文件 1.2 dom4j解析xm ...

  6. 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理

    第2章Java并发机制的底层实现原理 2.1 volatile的应用 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行, ...

  7. Java多线程之线程池7大参数、底层工作原理、拒绝策略详解

    Java多线程之线程池7大参数详解 目录 企业面试题 线程池7大参数源码 线程池7大参数详解 底层工作原理详解 线程池的4种拒绝策略理论简介 面试的坑:线程池实际中使用哪一个? 1. 企业面试题 蚂蚁 ...

  8. HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)

    HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源:http://www.cnblogs.com/beatIteWeNerverGiveU ...

  9. python的底层实现,Python封装底层实现原理详解(通俗易懂)

    事实上,Python 封装特性的实现纯属"投机取巧",之所以类对象无法直接调用以双下划线开头命名的类属性和类方法,是因为其底层实现时,Python 偷偷改变了它们的名称. 前面章节 ...

最新文章

  1. 查看Firefox中的缓存
  2. 【iOS与EV3混合机器人编程一系列五个】iOS_WiFi_EV3_Library 解剖连接EV3
  3. Spring Boot 解决跨域Cors问题
  4. leetcode887 鸡蛋掉落
  5. 程序员口头禅_今年系统管理员的口头禅:更聪明地工作,而不是更努力
  6. 苹果发布会全汇总:最贵59999元 Mac Studio性能史上最强!iPad Air 最没诚意...
  7. QT不让windows休眠的方法
  8. java 常用汉字_中国常用汉字有多少
  9. Linux命令面试突击
  10. WPS2000系列之四图文混编(转)
  11. 在线电脑内存测试软件,Everest/PC Mark内存基准测试_金士顿 8GB DDR3 1600_内存硬盘-中关村在线...
  12. 内网渗透工具-反向代理nps使用分析
  13. python画画excel_用Python在Excel里画出蒙娜丽莎的方法示例
  14. 学习C++程序设计需要什么基础
  15. ZYF loves binary(dp)
  16. SQL中rand和order by rand()用法
  17. createCriteria用法
  18. 服务器监控管理工具大全
  19. java数据结构与算法之双链表设计与实现
  20. 【H5游戏】-使用CreateJS实现一个【拯救球员】小游戏,快@你的小伙伴一起来玩儿吧

热门文章

  1. cocos2dx开发之util类方法——字符串替换
  2. 做购物车系统时利用到得几个存储过程
  3. 【Python 脚本报错】AttributeError: 'module 'yyy' has no attribute 'xxx'的解决方法
  4. Tensorflow初入门
  5. hibernate组件映射
  6. 微信小程序之旅一(页面渲染)
  7. 调试时碰到的错误syntax error, expect {, actual int, pos 1, json : 3
  8. [k8s]debug模式启动集群k8s常见报错集合(on the fly)
  9. BotVS开发基础—2.4 获取订单、取消订单、获取未完成订单
  10. (IOS)Swift Music 程序分析