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

  编程有一个准则,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. ORACLE数据库 DBA常用知识

    <常用命令参考> 个系统变量值 SQL> show user --显示当前连接用户 SQL> show error --显示错误 SQL> set heading off ...

  2. 【一天一道LeetCode】#92. Reverse Linked List II

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Reverse ...

  3. Oracle Enterprise Linux 64-bit 下Oracle11g的监听配置修改及测试步骤

    测试环境:Oracle Enterprise Linux 64-bit (5.8版本) + Oracle 11g 64位 相关说明: Oracle11g64位软件的安装位置为/u01/app/orac ...

  4. Chapter 2 User Authentication, Authorization, and Security(8):创建映射到登录名的数据库用户

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38944121,专题目录:http://blog.csdn.net/dba_huangzj ...

  5. 使用批处理文件(*.bat)同时打多个cmd窗口

    使用批处理文件(*.bat)同时打多个cmd窗口 最近在研究zookeeper,在本地建了几个目录,发现频繁的去各个目录启动zkServer.cmd十分繁琐,于是乎google,才有了下文: 使用批处 ...

  6. SMEM介绍

    SMEM :shared memory,是高通平台各子系统共享信息的一种机制,通过SMEM机制,PBL可以将信息传递给SBL1,SBL1可以将信息传递给RPM.LK.下面分析一个SMEM信息传递的具体 ...

  7. 反对抄袭 正解spring的@Autowired 不要相信网上的错误版本

    首先,最重要的, @Autowired的就是用来来消除 set ,get方法. 有些介绍,如著名的马士兵,说要在set方法上进行注入.我当时就看不明白了,既然只取消了一个GET,这个@Autowire ...

  8. PostgreSQL两种分页方法查询时间比较

    数据库中存了3000W条数据,两种分页查询测试时间 第一种 SELECT * FROM test_table WHERE i_id> limit 100; Time: 0.016s 第二种 SE ...

  9. D-BUS详细分析

    转:http://blog.csdn.net/yclzh0522/article/details/7090599 一.概述 官方网站:http://www.freedesktop.org/wiki/S ...

  10. iOS真机调试步骤(Xcode8.0以上版本)(2015年)

    方法/步骤(转载:http://jingyan.baidu.com/article/22fe7ced20cc073002617f97.html) 获取真机调试的证书,先在本地生成获取证书的文件,找不到 ...