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

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

spirng底层实现原理的更多相关文章

  1. PHP底层工作原理

    最近搭建服务器,突然感觉lamp之间到底是怎么工作的,或者是怎么联系起来?平时只是写程序,重来没有思考过他们之间的工作原理: PHP底层工作原理 图1 php结构 从图上可以看出,php从下到上是一个 ...

  2. Java并发之底层实现原理学习笔记

    本篇博文将介绍java并发底层的实现原理,我们知道java实现的并发操作最后肯定是由我们的CPU完成的,中间经历了将java源码编译成.class文件,然后进行加载,然后虚拟机执行引擎进行执行,解释为 ...

  3. iOS weak底层实现原理

    今年年底做了很多决定,离开工作三年的深圳,来到了上海,发现深圳和上海在苹果这方面还是差距有点大的,上海的市场8成使用swift编程,而深圳8成的使用OC,这点还是比较让准备来上海打拼的苹果工程师有点小 ...

  4. 《Java并发编程的艺术》Java并发机制的底层实现原理(二)

    Java并发机制的底层实现原理 1.volatile volatile相当于轻量级的synchronized,在并发编程中保证数据的可见性,使用 valotile 修饰的变量,其内存模型会增加一个 L ...

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

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

  6. iOS分类底层实现原理小记

    摘要:iOS分类底层是怎么实现的?本文将分如下四个模块进行探究分类的结构体编译时的分类分类的加载总结本文使用的runtime源码版本是objc4-680文中类与分类代码如下//类@interfaceP ...

  7. java并发编程系列七:volatile和sinchronized底层实现原理

    一.线程安全 1.  怎样让多线程下的类安全起来 无状态.加锁.让类不可变.栈封闭.安全的发布对象 2. 死锁 2.1 死锁概念及解决死锁的原则 一定发生在多个线程争夺多个资源里的情况下,发生的原因是 ...

  8. 那些年读过的书《Java并发编程的艺术》一、并发编程的挑战和并发机制的底层实现原理

    一.并发编程的挑战 1.上下文切换 (1)上下文切换的问题 在处理器上提供了强大的并行性就使得程序的并发成为了可能.处理器通过给不同的线程分配不同的时间片以实现线程执行的自动调度和切换,实现了程序并行 ...

  9. HashMap的底层实现原理

    HashMap的底层实现原理1,属性static final int MAX_CAPACITY = 1 << 30;//1073741824(十进制)0100000000000000000 ...

随机推荐

  1. C# 运行时序列化

    一. 序列化与反序列的作用 为什么要有序列化呢,考虑下面这种情况,在WINFORM或者更为方便的WPF工程中,当我们进行UI设计时,可以随意的将一个控件剪切/张贴到另外一个地方.操作方便的背后是什么在 ...

  2. Flexbox布局指南

    Flexbox布局概念 Flexbox布局( Flexible Box 或CSS3 弹性布局),是CSS3中的一种新的布局模式,是可以自动调整子元素的高和宽,来很好的填充任何不同屏幕大小的显示设备中的 ...

  3. Linux多线程实践(4) --线程特定数据

    线程特定数据 int pthread_key_create(pthread_key_t *key, void (*destr_function) (void *)); int pthread_key_ ...

  4. #include <iostream>与#include <iostream.h>的区别

    在新的C++标准中,生成新头文件的方法仅仅是将现有C++头文件名中的   .h   去掉.例如,<iostream.h> 变成了<iostream> ,<complex. ...

  5. (NO.00002)iOS游戏精灵战争雏形(十)

    到目前为止,子弹是有去无回.如果子弹击中目标或者飞出屏幕,那么子弹也就没必要存在了. 这里的不存在不是把它从屏幕中删除,因为前面提到了子弹缓存的作用,所以这里仅仅将其设置为不可见就可以了. 首先处理飞 ...

  6. 推荐一个优秀的c++源代码,TinyXml2

    项目主页:http://grinninglizard.com/tinyxml2docs/index.html tinyxml2.h /* Original code by Lee Thomason ( ...

  7. 《java入门第一季》集合框架引入与面试题

    注:在开始的几篇集合介绍里,不包含泛型的概念.泛型在讲述所有集合后再加入进去. 集合的由来:    我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我 ...

  8. Android Studio环境下搭建ReactNative

    1.安装Android Studio首先肯定是 安装Android Studio(包含SDK)(国内推荐)ps:这里有一点要注意,需要为SDK配置环境变量,名称必须为ANDROID_HOME 2.安装 ...

  9. STM32F429学习笔记(一)触屏工程Keil建立

    由于原来的STM32F103ZET6的flash坏掉了,所以又买了一块STM32F429DISCOVERY,这块板子非常不错,基于Cortex-M4内核,自带一块2.4寸TFT触屏,主频为180M,且 ...

  10. Java的依赖注入(控制反转)

    两个主角"依赖注入"和"控制反转": 1.二都说的都是同一件事,只是叫法不同.是一个重要的面向对象编程的法则,也是一种设计模式: 2.英文原称:依赖注入,Dep ...