Spring框架的设计理念

Spring 的骨骼架构:

Spring 框架中的核心组件:Core、Context 和 Beans。没有它们就不可能有 AOP、Web 等上层的特性功能。

Spring 的设计理念:

Bean 在 Spring 中才是真正的主角。Bean 在 Spring 中作用就像 Object 对 OOP 的意义一样,没有对象的概念就像没有面向对象编程,Spring 中没有 Bean 也就没有 Spring 存在的意义。就像一次演出舞台都准备好了但是却没有演员一样。Spring 解决了一个非常关键的问题他可以让你把对象之间的依赖关系转而用配置文件来管理,也就是他的依赖注入机制。而这个注入关系在一个叫 Ioc 容器中管理,那 Ioc 容器中有又是什么就是被 Bean 包裹的对象。Spring 正是通过把对象包装在 Bean 中而达到对这些对象管理以及一些列额外操作的目的。

核心组件如何协同工作:

前面把Bean 比作一场演出中的演员的话,那Context 就是这场演出的舞台背景,而Core 应该就是演出的道具了。只有他们在一起才能具备能演出一场好戏的最基本的条件。当然有最基本的条件还不能使这场演出脱颖而出,还要他表演的节目足够的精彩,这些节目就是 Spring 能提供的特色功能了。

我们知道Bean包装的是Object,而Object 必然有数据,如何给这些数据提供生存环境就是 Context 要解决的问题,对 Context 来说他就是要发现每个Bean之间的关系,为它们建立这种关系并且要维护好这种关系。所以 Context 就是一个 Bean 关系的集合,这个关系集合又叫 Ioc 容器,一旦建立起这个 Ioc 容器后 Spring 就可以为你工作了。那 Core 组件又有什么用武之地呢?其实 Core 就是发现、建立和维护每个 Bean 之间的关系所需要的一些列的工具,从这个角度看来,Core 这个组件叫 Util 更能让你理解。

核心组件详解:

Bean 组件

Bean 组件在 Spring 的 org.springframework.beans 包下。这个包下的所有类主要解决了三件事:Bean 的定义、Bean 的创建以及对 Bean 的解析。对 Spring 的使用者来说唯一需要关心的就是 Bean 的创建,其他两个由 Spring 在内部帮你完成了,对你来说是透明的。

Spring Bean 的创建时典型的工厂模式,他的顶级接口是 BeanFactory,下图是这个工厂的继承层次关系:

BeanFactory 有三个子类:ListableBeanFactory、HierarchicalBeanFactory 和 AutowireCapableBeanFactory。

但是从上图中我们可以发现最终的默认实现类是 DefaultListableBeanFactory,他实现了所有的接口。

每个接口都有他使用的场合,它主要是为了区分在 Spring 内部在操作过程中对象的传递和转化过程中,对对象的数据访问所做的限制。例如 ListableBeanFactory 接口表示这些 Bean 是可列表的,而 HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每个 Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定义 Bean 的自动装配规则

这四个接口共同定义了 Bean 的集合、Bean 之间的关系、以及 Bean 行为。

Bean 的定义主要有 BeanDefinition 描述,下图说明了这些类的层次关系:

Bean 的定义就是完整的描述了在 Spring 的配置文件中你定义的 <bean/> 节点中所有的信息,包括各种子节点。

当 Spring 成功解析你定义的一个 <bean/> 节点后,在 Spring 的内部他就被转化成 BeanDefinition 对象。

以后所有的操作都是对这个对象完成的。

Context 组件

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

ApplicationContext 是 Context 的顶级父类,他除了能标识一个应用环境的基本信息外,他还继承了五个接口,这五个接口主要是扩展了 Context 的功能。下面是 Context 的类结构图:http://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/origin_image006.png

可以看出 ApplicationContext 继承了 BeanFactory,这也说明了 Spring 容器中运行的主体对象是 Bean,另外 ApplicationContext 继承了 ResourceLoader 接口,使得 ApplicationContext 可以访问到任何外部资源

ApplicationContext 的子类主要包含两个方面:

  • ConfigurableApplicationContext 表示该 Context 是可修改的,也就是在构建 Context 中用户可以动态添加或修改已有的配置信息,它下面又有多个子类,其中最经常使用的是可更新的 Context,即 AbstractRefreshableApplicationContext 类。
  • WebApplicationContext 顾名思义,就是为 web 准备的 Context 他可以直接访问到 ServletContext,通常情况下,这个接口使用的少。
  • 再往下分就是按照构建 Context 的文件类型,接着就是访问 Context 的方式。这样一级一级构成了完整的 Context 等级层次。

ApplicationContext 必须要完成以下几件事:

  • 标识一个应用环境
  • 利用 BeanFactory 创建 Bean 对象
  • 保存对象关系表
  • 能够捕获各种事件
  • Context 作为 Spring 的 Ioc 容器,基本上整合了 Spring 的大部分功能,或者说是大部分功能的基础。

Core组件:

Core 组件其中一个重要组成部分就是定义了资源的访问方式。这种把所有资源都抽象成一个接口的方式很值得在以后的设计中拿来学习。

http://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/origin_image007.png

可以看出 Resource 接口封装了各种可能的资源类型,也就是对使用者来说屏蔽了文件类型的不同。

对资源的提供者来说,如何把资源包装起来交给其他人用这也是一个问题,我们看到 Resource 接口继承了 InputStreamSource 接口,这个接口中有个 getInputStream 方法,返回的是 InputStream 类。这样所有的资源都被可以通过 InputStream 这个类来获取,所以也屏蔽了资源的提供者。另外还有一个问题就是加载资源的问题,也就是资源的加载者要统一,从上图中可以看出这个任务是由 ResourceLoader 接口完成,他屏蔽了所有的资源加载者的差异,只需要实现这个接口就可以加载所有的资源,他的默认实现是 DefaultResourceLoader。

Context 和 Resource 的类关系图:

Context 是把资源的加载、解析和描述工作委托给了 ResourcePatternResolver 类来完成,他相当于一个接头人,他把资源的加载、解析和资源的定义整合在一起便于其他组件使用。

原文地址:https://www.cnblogs.com/xiaowater/p/9997419.html

时间: 2024-11-05 18:49:44

Spring框架的设计理念的相关文章

Spring框架的设计理念与设计模式分析

spring设计原理Spring框架的设计理念与设计模式分析 2016-1-27 by Damon 摘要:Spring作为现在最优秀的框架之一,被广泛的使用并有很多对其分析的文章.本文将从另外一个视角试图剖析出Spring框架的作者设计Spring框架的骨骼架构的设计理念,有那几个核心组件?为什么需要这些组件?它们又是如何结合在一起构成Spring的骨骼架构?Spring的AOP特性又是如何利用这些基础的骨骼架构来工作的?Spring中又使用了那些设计模式来完成它的这种设计的?它的这种设计理念对

Spring 框架的设计理念与设计模式分析

https://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/index.html Spring 的骨骼架构 Spring 总共有十几个组件,但是真正核心的组件只有几个,下面是 Spring 框架的总体架构图: 图 1 .Spring 框架的总体架构图 从上图中可以看出 Spring 框架中的核心组件只有三个:Core.Context 和 Beans.它们构建起了整个 Spring 的骨骼架构.没有它们就不可能有 AOP.Web

[转载] 多图详解Spring框架的设计理念与设计模式

转载自http://developer.51cto.com/art/201006/205212_all.htm Spring作为现在最优秀的框架之一,已被广泛的使用,51CTO也曾经针对Spring框架中的JDBC应用做过报道.本文将从另外一个视角试图剖析出Spring框架的作者设计Spring框架的骨骼架构的设计理念. AD: Spring作为现在最优秀的框架之一,已被广泛的使用,51CTO也曾经针对Spring框架中的JDBC应用做过报道.本文将从另外一个视角试图剖析出Spring框架的作者

深入理解java:4.2. 框架编程之Spring框架的设计理念

什么是Spring呢? Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. Spring优点 简单了解Spring之后,我们看一下Spring的优点. 1.方便解耦,简化开发. 2.AOP编程的支持. 3.声明式事务的支持. 4.方便程序的测试.. 5.方便集成各种优秀框架. 6.降低Java EE API的使用难度. Spring的骨骼架构 Spring总共有十几个组件,但是真正核心组件只有三个:Core.Context和Beans

Spring框架 教程

Spring教程 Spring教程...1 Spring框架概述...3 Spring是什么?...3 Spring的历史...4 Spring的使命(MissionStatement)...4 Spring受到的批判...4 Spring包含的模块...5 总结...6 Spring的IoC容器...6 用户注册的例子...7 面向接口编程...8 (用户持久化类)重构第一步--面向接口编程... 重构第二步--工厂(Factory)模式... 重构第三步--工厂(Factory)模式的改进.

回顾Spring框架

Spring框架: 传统JavaEE解决企业级应用问题时的“重量级”架构体系,使它的开发效率,开发难度和实际的性能都令人失望.Spring是以一个 救世主的身份降临在广大的程序员面前.Spring致力于JavaEE应用的各种解决方案,而不是仅仅专注于某一层的方案也可以说Spring 是一个企业级应用开发的一站式选择.Spring贯穿表现层,业务层,持久层.然而,Spring并不是为了取代他们而出现而是以高度的 开放性与它们无缝整合. Spring核心: IOC控制反转(Inversion of

Spring框架概述

Spring是最流行的Java企业级应用开发框架,全球数以百万的开发者在使用Spring框架创建高性能.易测试.可重用的代码. Spring框架的核心特性可以应用于任何Java应用,但扩展的JavaEE平台上可以构建Web应用.Spring框架的目标是通过POJO编程模型,使J2EE的开发更容易,促进良好的编程实践. POJO(Plain Old Java Object),是这样的一种“纯粹的”JavaBean,在它里面除了JavaBean规范的方法和属性没有别的东西,即private属性以及对

【Java】关于Spring框架的总结 (一)

本文总结一些关于Spring框架的理解,注意点及基础操作.如果有不对的地方,欢迎批评和建议.大家一起努力吧! Spring 框架简介 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架.Spring 致力于 Java EE 应用的各种解决方案,而不是仅仅专注于某一层的方案,可以说, Spring 是企业应用开发的"一站式"选择,Spring 贯穿表现层.

Spring框架之事务处理源码分析

1.事务就是以可控的方式对数据资源(数据库,文件系统)进行访问的一组操作.为了保证事务执行前后,数据资源所承载的系统状态处于"正确"状态,事务本身有4个限定属性(ACID):原子性,一致性,隔离性,持久性. 原子性:事务包含的全部操作是一个不可分割的整体,要么全部提交成功,要么全部失败. 一致性:一致性要求事务所包含的操作不能违反数据资源的一致性检查. 隔离性:各个事务之间相互影响的程度,不同的隔离级别决定了各个事物对该数据资源访问的不同行为.隔离性是面向数据资源的并发访问.    四