zoukankan      html  css  js  c++  java
  • 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中代理模式的使用

  • 相关阅读:
    Java匹马行天下之一顿操作猛如虎,框架作用知多少?
    ztree树应用
    动态将ASPX生成HTML网页并将网页导出PDF
    实现图片向上不停的无限滚动效果简单代码
    简单的前端正则验证用户输入的数字是否合法
    eclipse出现jdk版本更新导致无法启动
    删除所有视图 删除所有存储过程
    删除所有表的数据
    要求必须全部重复的数据sql--想了半天才写出来的
    查询树节点下的所有子节点包括根节点
  • 原文地址:https://www.cnblogs.com/yuandluck/p/9480317.html
Copyright © 2011-2022 走看看