1.Spring简介
1.1 Spring官网介绍
Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache License 2.0开源许可协议的形式发布,也有.NET平台上的移植版本。该框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一书中的代码,最初由Rod Johnson和Juergen Hoeller等开发。Spring Framework提供了一个简易的开发方式,这种开发方式,将避免那些可能致使底层代码变得繁杂混乱的大量的属性文件和帮助类。
1.2 维基百科介绍
Spring框架是 Java 平台的一个开源的全栈(Full-stack)应用程序框架和控制反转容器实现,一般被直接称为 Spring。该框架的一些核心功能理论上可用于任何 Java 应用,但 Spring 还为基于Java企业版平台构建的 Web 应用提供了大量的拓展支持。虽然 Spring 没有直接实现任何的编程模型,但它已经在 Java 社区中广为流行,基本上完全代替了企业级JavaBeans(EJB)模型。
1.3 百度百科介绍
Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。即Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。
2.Spring的体系结构
2.1 Spring 结构图(来源于Spring 4.x官网)
Spring由20多个模块组成,它们可以分为数据访问/集成(Data Access/Integration)、Web、面向切面编程(AOP, Aspects)、应用服务器设备管理(Instrumentation)、消息发送(Messaging)、核心容器(Core Container)和测试(Test)。
2.2 Spring 模块简介
2.2.1 Data Access/Integration
Data Access/Integration (数据访问/集成层)包括 JDBC、ORM、OXM、JMS 和Transactions模块。
JDBC 模块:提供了删除冗余的 JDBC 相关编码的 JDBC 抽象层;
ORM 模块:为流行的对象关系映射 API,包括 JPA,JDO,hibernate 和 myBatis,提供集成层;
OXM 模块:提供了抽象层,它支持对 JAXB,Castor,XMLBeans,JiBX 和 XStream 的对象/XML 映射实现;
JMS(Java 消息服务) 模块:包含生产和消费的信息的功能;
Transactions 模块:为实现特殊接口的类及所有的 POJO 支持编程式和声明式事务管理。
2.2.2 Web
Web 层由 WebSocket、Servlet、Web、Portlet 组成。
WebSocket 模块:为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式;
Servlet(即Web-MVC) 模块:包含 Spring 的模型-视图-控制器(MVC),实现了 web 应用程序;
Web 模块:提供了基本的面向 web 的集成功能,例如多个文件上传的功能和使用 servlet 监听器和面向 web 应用程序的上下文来初始化 IoC 容器;
Web-Portlet 模块:提供了在 portlet 环境中实现 MVC,并且反映了 Web-Servlet 模块的功能。
2.2.3 Core container
Core container(核心容器)由Beans、Core、Context、SpEL组成。
Bean 模块:提供 BeanFactory,它是一个工厂模式的复杂实现。
Core模块:提供了框架的基本组成部分,包括 IoC 和依赖注入功能。
Context 模块:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。建立在由核心和 Bean 模块提供的坚实基础上,它是访问定义和配置的任何对象的媒介。ApplicationContext 接口是上下文模块的重点。
SpEL(表达式语言)模块:在运行时提供了查询和操作一个对象图的强大的表达式语言。
2.2.4 其它
还有一些重要的模块,如 AOP,Aspects,Instrumentation,Messaging 和 Test模块。
AOP 模块:提供了面向方面的编程实现,允许你定义方法拦截器和切入点对代码进行干净地解耦,它实现了应该分离的功能。
Aspects 模块:提供了与 AspectJ 的集成,这是一个功能强大且成熟的面向切面编程(AOP)框架。
Instrumentation 模块:在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实现。
Messaging 模块:为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。它也支持一个注解编程模型,它是为了选路和处理来自 WebSocket 客户端的 STOMP 信息。
Test 模块:支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。
3.Spring的特点
方便解耦,简化开发:通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
IOC 控制反转:创建被调用的实例不是由调用者完成,而是由Spring容器完成,即容器在对象初始化时不用等待对象请求就主动将依赖传递给它。
AOP 面向切面编程:通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
非侵入式编程:Spring框架的API不会再业务逻辑上出现,即业务逻辑是POJO(Plain Ordinary Java Object)。由于业务逻辑中没有Spring的API,所以业务逻辑可以从Spring框架快速的移植到其他框架。
支持声明式事务:在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
方便测试:可用非容器依赖的编程方式进行几乎所有的测试工作,例如Spring对Junit4支持,可以通过注解方便的测试Spring程序。
与第三方框架的整合:Spring不排斥各种优秀的开源框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts、Hibernate、MyBatis 、Hessian、Quartz)等的直接支持。
降低Java EE API的使用难度:Spring对很多难用的Java EE API(如JDBC,JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些Java EE API的使用难度大为降低。
Spring的源码设计精妙、结构清晰:它包含了各种设计模式的应用,Spring框架源码就是Java技术的最佳实践范例。
4.Spring的优点
低侵入式设计,代码的污染极低。
可使用容易提供的众多服务,如事务管理,消息服务等 。
Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦。
容器提供了众多的辅助类,能加快应用的开发 。还提供了单例模式支持 。
.容器提供了AOP技术,利用它很容易实现如权限拦截,监控、安全、事务、日志等功能 。
Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。
独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺。
Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择spring的部分或全部。
网友评论