Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 对于入门Spring的初学者而言,以下的说明可以让您对这些术语与概念有个基本的认识。
1)轻量级(Lightwight):
轻量级的形容是相对于一些重量级的容器(如EJB容器)来说的,Spring的核心包在文件容量上只有不到1MB的大小,而使用Spring核心包所需要的资源负担也是很小的,您甚至可以在小型设备中使用Spring的核心包。
2)非侵入性(No intrusive)
框架原来的用意是提供一个架构的实现,让开发人员可以在基于框架的基础上,快速地开发出遵循架构的所需的应用程序,然而有些框架一旦被使用,应用程序就与框架发生了依赖,例如大量使用了框架的API,或直接继承API的某些类型等,都会使应用程序组件与框架发生依赖,而无法从框架中独立出来,更别说当中的组件可以直接重用到另一个应用程序之中。
Spring的目标之一是实现非侵入性框架,希望让应用程序几乎感受不到框架的存在,减低应用程序在框架移植时的负担,进一步增强应用程序组件的可重用性,简单地说,使用Spring的话,应用程序中某些组件可以直接拿到另一个应用程序或框架之中直接使用。
3)容器(Container)
Spring提供容器功能,容器可以管理对象的生命周期,对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称,如何产生 (Prototype方式或Singleton方式),那个对象产生之后必须设定成为某个对象的属性等,在启动容器后,所有的对象都可以直接取用,不用编写任何一行代码来产生对象,或是建立对象与对象之间的依赖关系。
换个更直白点的说明方式:容器是一个Java所编写的程序,原先必须自行编写程序以管理对象关系,现在容器都会自动帮您做好。
4)Ioc(Inversion of Control)
Spring最重要的核心概念是Inversion of Control,中文常翻译为“控制反转”,更具体的另一个名词是Dependency Injection,中文常翻译为“依赖注入”。使用Spring,您不必自己在程序代码中维护对象的依赖关系,只需要在配置文件中加入设定,Spring核心容器会自动根据配置将依赖注入指定的对象。
通常使用英文Ioc,而翻译为 依赖注入。
5)AOP(Aspect-oriented programming)
Spring最被人重视的另一方面是支持AOP的实现,然而AOP框架只是Spring支持的一个子框架,说Spring框架是AOP框架并不是一个适当的描述,人们对于AOP的关注反映至Spring上,使得人们对于Spring的关注集中在它的AOP框架上,虽然所有误解,但也突现了Spring的另一个令人关注的特色。
举个实际的例子来说明AOP的功能之一,假设您有个日志(Logging)的需求,您可以无须修改任何一行程序代码,就可以将这个需求加入至原先的应用程序之中,而若您愿意,也可以在不修改任何程序的情况下,将这个日志的功能移除。
Spring的Ioc容器功能与AOP功能的实现是其重心所在,在Spring下实现了持久层,MVC Web框架以及各种企业服务的API封装,他们的实现有些倚重于Spring的Ioc容器与AOP功能,Sping的这些框架或封装的API功能彼此可以独立,也可以结合其它的框架方案加以替代,Spring希望提供one-stop shop的框架整合方案。
6)持久层
Spring提供对持久层的整合,如对JDBC的使用加以封装与简化,提供事物(Transaction)管理功能,对于O/R Mapping工具(Hibernate,IBATIS)的整合,Spring也提供了解决的方案。
7)Web框架
Spring也提供MVC Web框架的解决方案,使用Spring Web框架的好处是可以善用Ioc与AOP的功能,您甚至可以轻松地替换使用不同的View层技术,例如使用JSP,结合Tiles,使用PDF作为展现给使用者的画面技术。
也可以将自己熟悉的Web框架与Spring整合,例如Struts,JSF等,都可以与Spring整合,而适用于当前所进行的应用程序。
8)其它企业服务的封装
对于一些服务,例如JNDI,Mail,任务计划(Scheduling),远程(Remoting)等,Spring不直接提供实现,而是采取抽象层方式对这些业务进行封装,让这些服务在使用时可以有一致的使用模型,并且在使用上更为简化。