Spring已经成为Java应用的首选的full-stack开发框架,该框架本着”从实践中来,到实践中去”的原则,对传统的EJB重量型框架的思想进行了颠覆式的革新,通过Rod Johnson天才般的演绎,使得spirng在短时间就流行起来。
Spring是分层的Java SE/EE应用一站式的轻量级开元框架,以IOC(Inverse of Control:控制反转)和AOP(Aspect Oriented Programming:面向切面编程)为内核,并提供了展现层Spring MVC和持久层Spring JDBC以及业务层事物管理等众多的企业级应用技术。
一.Spring给我们带来了什么?
1.方便解耦,简化开发
通过spring的IOC容器,我们可以将对象之间的依赖关系交由spring去控制维护,避免了硬编码所造成的过度程序耦合。
2.AOP编程支持
通过spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。比如日志、监控、拦截等等。
3.声明式事物的支持
4.方便集成各种优秀框架
spring可以很方便的集成(Struts,Hibernate,Mybatis,Hession,Quartz等等)。
二.Spring体系结构
从整体看这5个主要模块几乎为企业应用提供了所需的一切,从持久层、业务层到展现层都拥有相应的支持。就像吕布的赤兔马和方天画戟、秦琼的黄骠马和熟铜锏,IoC和AOP是Spring所依赖的根本。在此基础上,Spring整合了各种企业应用开源框架和许多优秀的第三方类库,成为Java企业应用full-stack的开发框架。Spring框架的精妙之处在于:开发者拥有自由的选择权,Spring不会将自己的意志强加给开发者,因为针对某个领域问题,Spring往往支持多种实现方案。当希望选用不同的实现方案时,Spring又能保证过渡的平滑性。
IoC。
Spring核心模块实现了IoC的功能,它将类和类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述,由IoC容器负责依赖类之间的创建、拼接、管理、获取等工作。BeanFactory接口是Spring框架的核心接口,它实现了容器的许多核心功能。
Context模块构建于核心模块之上,扩展了BeanFactory的功能,添加了i18n国际化、Bean生命周期控制、框架事件体系、资源加载透明化等多项功能。此外,该模块还提供了许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问等。ApplicationContext是Context模块的核心接口。
表达式语言模块是统一表达式语言(unified EL)的一个扩展,该表达式语言用于查询和管理运行期的对象,支持设置和获取对象属性,调用对象方法、操作数组、集合等。还提供了逻辑表达式运算、变量定义等功能。使用它就可以方便地通过表达式串和Spring IoC容器进行交互。
AOP模块。
AOP是继OOP之后,对编程设计思想影响最大的技术之一。AOP是进行横切逻辑编程的思想,它开拓了人们考虑问题的思路。在AOP模块里,Spring提供了满足AOP Alliance规范的实现,此外,还整合了AspectJ这种AOP语言级的框架。在Spring里实现AOP编程拥有众多的选择。Java 5.0引入java.lang.instrument,允许在JVM启动时启用一个代理类,通过该代理类在运行期修改类的字节码,改变一个类的功能,实现AOP的功能。
数据访问和集成。
任何应用程序,其核心的问题是对数据的访问和操作。数据有很多表现形式,如数据表、XML、消息等,而每种数据形式又拥有不同的数据访问技术(如数据表的访问既可以直接通过JDBC,也可以通过Hibernate或iBatis)。
Spring站在DAO的抽象层面,建立了一套面向DAO层统一的异常体系,同时将各种访问数据的检查型异常转换为非检查型异常,为整合各种持久层框架提供基础。其次,Spring通过模板化技术对各种数据访问技术进行了薄层的封装,将模式化的代码隐藏起来,使数据访问的程序得到大幅简化。这样,Spring就建立起了和数据形式及访问技术无关的统一的DAO层,借助AOP技术,Spring提供了声明式事务的功能。
Web及远程操作。
该模块建立在Application Context模块之上,提供了Web应用的各种工具类,如通过Listener或Servlet初始化Spring容器,将Spring容器注册到Web容器中。其次,该模块还提供了多项面向Web的功能,如透明化文件上传、Velocity、FreeMarker、XSLT的支持。此外,Spring可以整合Struts、WebWork、Tapestry Web等MVC框架。
Web及远程访问。
Spring自己提供了一个完整的类似于Struts的MVC框架,称为Spring MVC。据说,Spring之所以也提供了一个MVC框架,是因为Rod Johnson想证明实现MVC其实是一项简单的工作。当然,如果你不希望使用Spring MVC,那么Spring对Struts、Tapestry等MVC框架的整合,一定也可以给你带来方便。相对于Servlet的MVC,Spring在简化Portlet的开发上也做了很多工作,开发者可以从中受益。
此外,Spring在远程访问以及Web Service上提供了对很多著名框架的整合。由于Spring框架的扩展性,特别是随着Spring框架影响性的扩大,越来越多框架主动地支持Spring框架,让Spring框架应用涵盖面越来越宽广。