Spring 框架分析


Spring 框架三大核心组件:

  • Core
  • Context
  • Beans

他们构建起了整个 Spring 的骨骼架构。

Spring 的设计理念

Bean 在 Spring 中作用就像 Object 对 OOP 的意义一样,没有对象的概念就没有面向对象编程。Spring 把对象之间的依赖关系转而用配置文件来管理,也就是他的依赖注入机制。而这个注入关系在一个叫 IOC 容器中管理,那么 IOC 容器就是被 Bean 包裹的对象,Spring整数通过把对象报装在 Bean 中而达到对这些对象的管理以及一些列而外操作的目的。

IOC

IOC 的全称是(Inversion of Control)控制反转,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。

对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的”控制反转”就是对组件对象控制权的转移,从程序代码本身转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系。

IoC是在系统运行时,动态的向某个对象提供它所需要的其他对象。这一点通过依赖注入(DI)来实现。

DI

DI—Dependency Injection,即“依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态地将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能。

简单来说就是某个对象需要调用其他对象时,被调用对象这个工作交予spring来完成,并且注入依赖。此处的依赖指Bean与容器间的依赖关系。

1
当某个角色 需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中 创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者。因此也称为依赖注入。

IOC 和 DI 的关系

其实它们是同一个概念的不同角度描述,由于控制反转概念比较含糊(可能只是理解为容器控制对象这一个层面,很难让人想到谁来维护对象关系),所以2004年大师级人物Martin Fowler又给出了一个新的名字:“依赖注入”。相对IoC 而言,“依赖注入”明确描述了“被注入对象依赖IoC容器配置依赖对象”。

核心组件 协同工作

Context 就是一个 Bean 关系的集合,这个关系集合又叫 Ioc 容器。Core 就是发现、建立和维护每个 Bean 之间的关系所需要的一些列的工具。

Bean 组件

Bean 组件在 Spring 的 org.springframework.beans 包下。这个包下的所有类主要解决了三件事:

  • Bean的定义
  • Bean的创建
  • Bean的解析

对 Spring 的使用者来说唯一需要关心的是 Bean 的创建,其余的由 Spring 在内部帮你完成。

Context组件

Context 在 Spring 的 org.springframework.context 包下, Context 组件实际上就是给 Spring 提供一个运行时的环境,用以保存各个对象的状态。

ApplicationContext 是 Context 的顶级父类,他除了能标识一个应用环境的基本信息外,他还继承了五个接口,这五个接口主要是扩展了 Context 的功能。

总体来说 ApplicationContext 必须要完成以下几件事:

  • 标识一个应用环境
  • 利用 BeanFactory 创建 Bean 对象
  • 保存对象关系表
  • 能够捕获各种事件

    Context 作为 Spring 的 Ioc 容器,基本上整合了 Spring 的大部分功能,或者说是大部分功能的基础。

Core组件

Core 组件作为 Spring 的核心组件,他其中包含了很多的关键类,其中一个重要组成部分就是定义了资源的访问方式。把所有资源都抽象成一个接口。

AOP(面向切面编程)

面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承、多态和封装。而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配。实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用。 这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来说,AOP基本上是通过代理机制实现的。

原文:大专栏  Spring 框架分析


猜你喜欢

转载自www.cnblogs.com/sanxiandoupi/p/11652346.html