spring 简介

引用:http://hi.baidu.com/y0h0001/item/7f8f9e5080bbebb48c12edef

Spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的,简单地说,Spring是一个轻量级的基于控制反转(IoC)、面向方面(AOP)的容器框架。Spring使用基本的JavaBean来完成以前只能由EJB完成的任务。然而,Spring的用途不仅限于服务器端的开发,从简单性、可测试性、松耦合的角度而言,任何Java应用都可以从Spring框架中受益。

Spring框架简介
    Spring 框架是一个反转控制(Inversion of Contorl)容器,并且集成了许多附加的功能和模块,在某些方面,它确实是一个IoC容器,而在另外一方面,它也是一个完整的应用程序开发平台。

    Spring在2000年出现,现在它已发展经成为有望代替 EJB 标准的成熟框架,在2000年到2004年,SUN公司发布了一系列针对 EJB 的规范,原来如果不编写大量重复性代码并且或者使用专有的工具来屏蔽底层技术,那么将很难理解、开发、部署 EJB。Rod 创造性地编写了《Expert One-on-One J2EE Design and Development》,这本书向广大开发人员介绍了如何使用简单的IoC容器和一系列封装API来取代EJB,而这些API可以将你的程序与Sun的底层API隔离开来。在Spring中不需要直接与JDBC、JMS、JTA等 API直接交互,而是应该使用Spring提供的各种模板类和辅助类。虽然Sun公司的核心企业API目前仍然很重要,但使用Spring的一个作用的就是放宽了Sun公司在定义或提议的新库和应用上的限制。Spring不是直接对 JDBC或JNDI进行编程,而是在Spring容器内编写自己的代码进行操作,这样就不必了解实现持久化、消息传递以及其它处理时所使用的底层技术。作为打破Sun公司在Java标准制定上的垄断地位的一种尝试,Spring并不是现在唯一的项目,但确实最成功的项目。

    你可能会编写一些自己的持久化层对象来直接与JDBC交互,但是也可以使用Oracle定制的专有代码来实现一部分,而用Hibernate实现剩余的其他部分。Spring通过提供一个神秘的IoC容器和一组有用的抽象,就可以支持这种选择。有关企业开发的讨论不在只是涉及Sun公司定制的各种标准。相反,Spring通过提供一种公用的"总线",在次基础上可以构建大多数新的项目应用,从而使开发企业应用有了更多的选择。以Spring与Web框架的集成为例,Struts2等都提供了与Spring的集成,Spring也为各种ORM提供了集成,例如与Hibernate的集成。Spring作为一种开发平台,可以让开发人员自由选择各种实现,在一定程度上讲,现在几乎所有的开源库或项目都必须支持与Spring的集成,才能让更多的开发人员愿意使用它,业内许多人士一致认为,虽然Sun声称Java是一个平台,但它实际上只是一种编程语言,而Spring才是一种真正的平台。

    对于IoC没有一个明确的定义,但比较集中的一个就是依赖注入,所谓依赖注入是一种模式,其中,对象创建和链接的控制由对象转移到工厂。

    作为一种轻量级容器,Spring负责将一套组件集成在一起,通过JavaBean的属性或构造函数参数注入依赖对象的实例。使用Spring,你可以先开发一系列简单的对象(组件),再告诉Spring如何把这些组件串接(组装)起来以构建更大的系统。如果你的系统架构依赖于可重用的组件,这样的系统实现(由Spring将组件串接起来)方法就非常方便。Spring以一种描述程序结构的XML文件为基础,把各种组件串接起来构造成系统

    Spring负责将一套功能组件串接在一起组成一个系统,通过这种方法来促进组件的重用。Spring框架不是要取代已经存在的其它框架,而是致力于将已有的框架很好地整和起来。

    Spring是一个开源框架,它的主要优势之一就是其分层结构,分层结构允许用户选择使用那一个组件,同时为J2EE应用程序开发提供集成的框架。

    Spring框架的官方网站是www.springframework.org,目前最新版本为2.5版。

16.1.1 Spring框架的系统结构
    Spring框架系统在设计上采用分层架构设计,不同于J2EE平台中的很多其它框架的实现技术,Spring 框架并不是一个一体化的整体框架,它采用的是分层架构设计和组件化实现。

    这种分层的设计理念使得使用Spring框架的应用程序开发者可以根据应用系统的具体需求选取所需要的目标组件,而不必关心其它组件。当然,在实际应用开发中使用比较频繁的组件,则是Spring的核心部分,也就是IoC的配置框架。

    在使用Spring框架的IoC组件时,对于基于其上的MVC框架、ORM组件以及DAO组件等,开发者可以暂时不必理会它们,但这不会影响应用系统中对IoC组件的具体应用。

    Spring框架主要由7个定义良好的、相互独立的模块组件构成,Spring模块构建在其核心的IoC容器之上,而其核心容器则定义了创建、配置、管理JavaBean(Java中的组件类)的方式,下图是Spring框架系统结构图:

2 Spring框架中模块组件的功能说明
    组成Spring框架的每个模块(组件)都可以单独存在,或者与其它一个或多个模块联合使用,各个模块的介绍如下:

    1.核心容器(Spring Core)
    核心容器提供Spring框架的基本功能,核心容器的主要组件是BeanFactory,它是工厂模式的具体实现。BeanFactory使用控制反转(IoC)模式将应用程序中所依赖的目标对象与应用程序本身的代码分离开。

    2.Spring上下文(Spring Context)
    Spring上下文是一个配置文件,用于向Spring框架提供上下文信息。Spring上下文包括企业服务(例如JNDI、EJB)、电子邮件、国际化、校验和调度等方面的功能定义。
    
    3.Spring的面向方面的编程(Spring AOP)
    通过配置管理特性,Spring AOP模块直接将面向方面的编程功能集成到了Spring框架中。所以可以很容易地使Spring框架管理的任何对象都支持AOP技术。

    Spring AOP模块为基于Spring框架的应用程序中的对象提供了事务管理服务,通过使用Spring AOP,可以将声明性事务管理技术集成到应用程序中。

    4.Spring JDBC DAO抽象层(Spring DAO)
    JDBC DAO抽象层提供了有意义的异常层次结构,可用来管理JDBC API中有关数据库访问操作方面的异常处理和不同数据库供应商抛出的错误消息。异常的层次结构化简化了错误处理,因为Spring DAO的面向JDBC的异常遵从通用的DAO异常层次结构。

    5.Spring ORM的对象关系工具(String ORM)
    Spring框架提供了对ORM(对象/关系映射)工具的支持,其中包括JDO、Hibernate、iBati SQL Map等ORM,并且利用HiernateDaoSupport类可重用现有的Hibernate框架。

    6.Spring Web模块(Spring Web)
    Web上下文模块建立在应用程序上下文模块之上,为基于Web的应用程序提供了上下文。所以,Spring 框架支持与Struts的集成。

    7.Spring MVC框架(Spring Web MVC)
    Spring MVC框架是一个全功能的构建Web应用程序的MVC实现,通过策略窗口,MVC框架成为高度可配置的。Spring MVC支持许多视图技术的实现,包括JSP、Velocity、Tiles、iText和POI等。

    Spring框架的功能可以用在J2EE服务器中,大多数功能也适合用于不受管理的环境。Spring的核心要点是:支持不绑定到特定J2EE服务的可重用业务和数据库访问对象。因此这样的对象可以在任何不同的J2EE 环境(Web或EJB)、独立应用程序、测试环境之间重用。

16.1.3 Spring框架系统结构的特性体现
    1.采用分层结构
    Spring框架的各个部分(层)是可以相互独立的,这正体现出了Spring框架以灵活性为主的特点:各个部分相互结合后又能提供一个全面的企业级的解决方案,从数据访问层到表示层都提供了相应的技术支持。

    2.遵守"不重新发明轮子"的理念
    尽管Spring框架系统本身提供了企业级应用开发中所需要的各个方面的技术支持,但在全面技术支持方面的具体技术实现时,遵循"不重新发明轮子"的理念,比如:它提供了对数据库的数据访问机制的实现,但是它的数据访问机制可以基于JDBC、Hibernate和JDO等不同的实现,"重用和再包装"的思路充满了整个Spring框架的各个方面的技术实现。

    3.简化J2EE平台中各种核心和复杂技术(如事务、O/R Mapping、AOP等)
    在"不重新发明轮子"的理念指导下,在Spring框架中提供了对J2EE平台中各种现有技术的重用和再包装,并通过再包装后为用户提供一个更加简洁和方便的应用接口。比如:在Spring框架中所提供的JdbcTemplate类就是对JDBC API的简化,提供的HiernateTemplate类是对Hibernate API的简化,提供的TransactionTemplate事务模板类则简化了事务编程。

posted @ 2012-09-18 15:30  镇水古月  阅读(241)  评论(0编辑  收藏  举报