Spring概述、组件以及其发展历程

Spring的概述

Spring是一种开源轻量级框架,是为了解决企业应用程序开发复杂性而创建的,Spring致力于解决JavaEE的各层解决方案,而不仅仅于某一层的方案。

2002年RodJohnson写了一本书叫《Expert one on one J2EE 设计与开发》Spring概述、组件以及其发展历程

Spring来源

在这本书中,他对传统的,J2EE技术日益臃肿和低效提出了质疑,他觉得应该有更便捷的做法,紧接着根据此书的思想,他提出了Interface21框架,这个框架就是Spring的雏形。

他提出了技术实用为准的主张,引发了人们对“正统”J2EE的反思,2003年2月Spring框架正式称为一道开源项目,Spring致力于J2EE应用的各种解决方案,而不仅仅专注于某一层解决方案。可以说Spring是企业应用开发的“一站式”选择, Spring贯穿于表现层、业务层、持久层,然而Spring并不想取代那些已经有的框架,而是以高度的开放性,与这些已有的框架进行整合。Spring确实给人一种特别清新,爽朗的感觉。仿佛雨后的绿草丛,讨人喜欢,又蕴藏着勃勃生机。Spring是一个轻量级框架,它大大简化了Java企业级开发,提供了强大稳定的功能,没有带来额外的负担,让人们用Spring做每一件事情的时候,都有得体和优雅的感觉。

Spring有两个目标:

1、让现有的技术更容易使用,

2、促进良好的编程习惯。

Spring是一个全面的解决方案,它坚持一个原则:不从新造轮子。已经有较好解决方案的领域,Spring绝不重复性实现,比如:对象持久化和OR映射,Spring只对现有的JDBC,Hibernate等技术提供支持,使之更容易使用,而不做重复的实现。Spring框架有很多特性,这些特性由7个定义良好的模块构成。

Spring体系结构

Spring概述、组件以及其发展历程

目前Spring最新版本已经发展到3.1版本了,在Spring各版本中,Spring的功能和特点大致是被组织成了7个部分。

1、 Spring Core:Spring框架的核心,提供了IOC和依赖注入特性

2、 Spring Context:它提供了一种框架风格的方式来访问对象,有些像JNDI注册表,它继承自Beans包的功能,同时增加了国际化,事件传播,资源装载,以及透明创建上下文

3、 Spring AOP:通过配置管理,Spring AOP直接将面向方面编程功能集成到了Spring框架中

4、 Spring DAO:提供了JDBC抽象层,它可以消除冗长的JDBC编码和解析数据块厂商特有的错误代码

5、 Spring ORM:Spring框架插入了若干个ORM框架,从而提供了ORM对象关系工具,其中包括,JDO,Hibernate,iBatis等。所有这些都遵从Spring的通用事物和DAO异常层次结构。

6、 Spring Web模块:Spring的Web上下文建模建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文,所以,他支持与Jakarta Struts的集成,

7、 Spring MVC框架:MVC框架是一个全功能的构建Web应用程序的MVC实现。

当然7各部分不是绝对的,这是比较早的结构划分,也是在Spring1.2的时候提出的,在Spring2.0版本,这7个部分优化成了6个部分。

我们知道了Spring大致分为7各部分之后,下面我们来看一下各个部分的应用场景

1、 Spring Core:即,Spring核心,它是框架最基础的部分,提供IOC和依赖注入特性

2、 Spring Context:即,Spring上下文容器,它是BeanFactory功能加强的一个子接口

3、 Spring Web:它提供Web应用开发的支持

4、 Spring MVC:它针对Web应用中MVC思想的实现

5、 Spring DAO:提供对JDBC抽象层,简化了JDBC编码,同时,编码更具有健壮性。

6、 Spring ORM:它支持用于流行的ORM框架的整合,比如:Spring + Hibernate、Spring + iBatis、Spring + JDO的整合等等。

7、 Spring AOP:AOP即,面向切面编程,它提供了与AOP联盟兼容的编程实现

实际上这些模块之间并不是全部紧密联系的,大部分是可独立使用的。也就是说,我们可以单独使用Spring框架中的一个模块或几个模块。

Spring Core 和 Spring Context

Spring框架核心以BeanFactory为基础,以bean的方式组织,管理Java应用中个组件以及组件之间的依赖关系,松耦合运行良好,这是因为Spring的核心机制,这个机制就是依赖注入,什么是依赖注入,我们后面再讲。这里我们只需要知道 依赖注入 是Spring的核心机制。

Spring使用BeanFactory作为应用中负责生产和管理个组件的工厂,同时,BeanFacotry也是组件运行的容器,而BeanFactory是根据配置文件,来确定容器中的bean实现。Bean之间的依赖关系,是由BeanFactory来管理的,bean的实例化过程也是由BeanFactory来管理,这里我们通过依赖注入,就可以实现bean对bean实现类的依赖解耦,变成对接口的依赖。程序从面向具体的类的编程,变成了面向接口编程,这样就可以极大的降低应用程序中各组件之间的耦合。而Spring Context是BeanFactory的加强,也就是说Spring Context是BeanFactory的一个加强版的子接口。它提供了J2EE应用程序中大量的增强功能,比如:随着Web应用启动的自我创建,程序国际化等。

Spring概述、组件以及其发展历程

Spring 核心 Spring Core

Spring Web 和 Spring MVC

对于Spring体系结构中Web和MVC这两个模块主要提供Web应用程序方面的支持,他们是有区别的,比如:Spring Web框架 它围分发器DispatcherServlet设计。DispatcherServlet将请求分发到不同的处理器,这个就是它的设计原理。

而至于Spring MVC框架,提供了清晰的角色划分,这些角色包括控制器,验证器,命令对象、表单对象,模型对象,分发器,处理器,映射和解析器等等。Spring MVC支持多种表现层技术:Velocity、XSLT等等,甚至可以直接输出也就是返回PDF电子文档或者Excel文档,这就是Spring的强大之处。

Spring概述、组件以及其发展历程

Spring MVC Web成的支持

Spring AOP面向切面编程:

Spring概述、组件以及其发展历程

Spring 核心 AOP

面向切面编程,实际上AOP是起源于面向对象编程OOP,面向对象编程我们已经很熟悉了,面向对象编程的过程中,实际上是有一定的局限性的,比如:事务处理,那么AOP就对OOP进行了补充和完善,它解决了OOP无力解决的问题,但是AOP和OOP之间不能互相替代,也就是说虽然AOP是OOP发展而来的,但是不能完全取代OOP,它们是相互补充,共利共赢。“切面”我们可以想象成一个长滚木,切断后形成的“截面”,我们可以理解为“切面”,面向对象代码中,程序代码是衔接的,举个例子:比如某行对象操作出现了异常,对于OOP接下来就是异常处理。那么整个过程,可以抽象理解为程序是上下结构的,而AOP则是面向截面的,我们再来看个例子,当程序某个点出现异常,接下来程序不必写异常处理代码,直接执行后面的程序。我们可以把异常看成透明的,那么如何异常处理呢?当程序抛出异常的时候,AOP会将程序拦住,执行拦截中的异常处理代码,这段代码可以专门用作异常处理,说的简单些,AOP就是可以拦截程序流程,执行“截面”里面的代码,对于Spring框架中的面向切面编程模块,它完善了Spring的依赖注入,而它的完善作用主要表现在两个方面,1、面向切面编程提供了声明式事务处理2、Spring支持用户自定义切面。

实际上Spring还可以与AspectJ整合,整合后允许通过依赖注入配置AspectJ的切面。

Spring持久化的支持:

Spring概述、组件以及其发展历程

Spring 持久层解决方案

Spring没有自己实现持久化解决方案,它集合了现有流行的持久化框架,比如:Hibernate、iBatis,JDO等框架,另外,由于喜欢使用JDBC完成数据持久化的程序员,Spring采用了JDBC模板封装了JDBC的数据块操作。那么程序员可以以更加方便的方式使用JDBC,Spring对各种持久化技术提供了一致的编程方式,不管是直接使用JDBC,还是使用各种流行的ORM框架,Spring都提供一致的异常继承体系。它使用模板封装持久化访问的通用步骤,来自底层的数据库的异常都是难以恢复的,因此Spring将数据块访问的checked异常转换为运行异常。这样在编译的时候就不会出现编译异常。避免了繁琐的try......catch.......

这是Spring框架提供的便捷点。


分享到:


相關文章: