Spring详解1.概述

45次阅读

共计 3855 个字符,预计需要花费 10 分钟才能阅读完成。

博客地址:https://spiderlucas.github.io 备用地址:http://spiderlucas.coding.me
1 Spring 是什么
Spring 是由 Rod Johnson 缔造的一个分层的 Java SE/EE 应用一站式的轻量级开源框架,以 IoC(Inverse of Control,反转控制)和 AOP(Aspect Oriented Programming,面向切面编程)为内核,提供了展现层 Spring MVC、持久层 Spring JDBC 及业务层事务管理等一站式的企业级应用技术。
2 Spring 的优点

方便解耦——Spring 提供的 IoC 容器实现了对象依赖关系的管理,避免了硬编码导致的耦合。
支持 AOP——Spring 提供的 AOP 功能,方便进行面向切面编程。
声明式事物——Spring 提供了通过声明的方式灵活的进行事务管理。
方便程序测试——可以用非容器以来的编程方式进行几乎所有的测试工作。
集成了多种优秀框架——Spring 提供了对各种优秀框架(如 Struts、Hibernate、Hessian、Quartz 等)的直接支持。
降低 Java EE API 的使用难度——Spring 对很多难用的 Java EE API(如 JDBC、JavaMail、远程调用等)提供了一个薄薄的封装层,使得这些 Java EE API 的使用难度大为降低。
Java 源码是经典学习范例——Spring 的源码设计精妙、结构清晰,是 Java 技术的最佳实践的范例。

3 Spring 体系结构
Spring 框架按照所属功能可以划分为 5 个主要模块,如下所示:
IOC
Spring 的核心模块实现了 IoC 的功能,它将类和类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述,由 IoC 容器负责类的创建,管理,获取等工作。

BeanFactory 接口是 Spring 框架的核心接口,实现了容器很多核心的功能。
Context 模块构建于核心模块之上,扩展了 BeanFactory 的功能,包括国际化、Bean 生命周期控制、框架事件体系、资源加载透明化等功能;还提供了众多企业级服务的支持,如邮件服务、任务调度、JNDI、EJB、远程访问等。ApplicationContext 是 Context 模块的核心接口。
表达式语言(Expression Language)是统一表达式语言的一个扩展,用于查询和管理运行期的对象,支持设置和获取对象属性,调用对象方法,操作数组、集合等。使用它可以很方便的通过表达式和 Spring IoC 容器进行交互。

AOP
Spring 提供了满足 AOP Alliance 规范的实现,还整合了 AspectJ 这种语言级的框架。Java 5.0 引入了 java.lang.instrument,允许在 JVM 启动时启用一个代理类,通过该代理类在运行期修改类的字节码,改变一个类的功能,从而实现 AOP 的功能。
数据访问和集成

Spring 站在 DAO 的抽象层面,建立了一套面向 DAO 层的统一的异常体系,同时将各种访问数据的检查异常转换成非检查型异常,为整合各种持久层框架提供基础。
Spring 通过模版化技术对各种高数据访问技术进行了薄层封装,将模式化的代码隐藏起来,使数据访问的程序得到大幅简化。
借助 AOP 技术,Spring 提供了声明式事务的功能。

Web 及远程操作

该模块建立在 Application Context 模块之上,提供了 Web 应用的各种工具类和多项面向 Web 的功能。
Spring 提供了一个完整的 MVC 框架——Spring MVC,还整合 Structs、WebWork 等 MVC 框架。
WebSocket 提供了一个在 Web 应用中高效、双向的通信,实现了客户端和服务器之间的高频和低延时消息交换。

测试框架
Spring 可以用非容器依赖的编程方式进行几乎所有的测试工作,支持 JUnit 和 TestNG 等测试框架。
4 Spring4.0 的新特性

完全支持 Java 8
核心容器的增强:支持范型依赖注入;对 CgLib 类代理不要求必须有空参构造器;提供了 @Description、@Conditional、@Lazy、@Order 等新的注解
支持用 Groovy 定义 Bean
Web 的增强:开始基于 Servlet 3.0;为了方便 REST 开发,引入了 @RestController 控制器注解;添加了一个 AsyncRestTemplate 支持 Rest 客户端的异步无阻塞请求。
支持 WebSocket
测试的增强:Spring-test 模块里的所有注解都可以用作 meta-annotation,这样就可以自定义组合注解来减少测试时的重复配置;提供了 @Sql 注解支持多数据源的测试。
提供了对 JCache 注解的支持,并对 Cache 抽象部分进行了增强。
添加了动态语言支持,对动态脚本语言计算表达式进行了抽象封装。
添加了多线程并发处理支持
增强了持久化处理

5 Spring 的子项目

Spring IO Platform : Spring IO 是可集成的、构建现代化应用的版本平台。Spring IO 是模块化的、企业级的分布式系统,包括一系列依赖,是的开发者仅能对自己所需的部分进行完全的部署控制。
Spring Boot:Spring 应用快速开发工具,用来简化 Spring 应用开发过程。
Spring XD:Spring XD(eXtreme Date,极限数据)是 Pivotal 的大数据产品。它结合了 Spring Boot 和 Grails,组成 Spring IO 平台的执行部分。
Spring Data:Spring Data 是为了简化构建基于 Spring 框架应用的数据访问实现,包括非关系数据库、Map-Reduce 框架、云数据服务等;另外,也包含对关系数据库的访问支持。
Spring Integration:Spring Integration 为企业数据集成提供了各种适配器,可以通过这些适配器来转换各种消息格式,并帮助 Spring 应用完成与企业应用系统的集成。
Spring Batch:Spring Batch 是一个轻量级的完整批处理框架,皆在帮助应用开发者构建一个健壮、高效的企业级批处理应用(这些应用的特点是不需要与用户交互,重复的操作量大,对于大容量的批量数据处理而言,这些操作往往要求较高的可靠性)
Spring Security:Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在 Spring 应用上下文配置的 bean,充分利用 Ioc 和 AOP 功能,为应用系统提供声明式的安全访问控制功能。
Spring Hateoas:Spring Hateoas 是一个用户支持实现超文本驱动的 REST Web 服务的开发库,是 Hateoas 的实现。Hateoas(Hypermedia as the engine of application state)是 REST 架构风格中最复杂的约束,也是构建成熟 REST 服务的核心。它的重要性在于打破了客户端和服务器之间严格的契约,是的客户端可以更加智能和自适应。
Spring Social:Spring Social 是 Spring 框架的扩展,用来方便开发 Web 社交应用程序,可通过该项目来创建与各种社交网站的交互,如 Facebook,LinkedIn、Twitter 等。
Spring AMQP:Spring AMQP 是基于 Spring 框架的 AMQP 消息解决方案,提供模版化的发送和接收消息的抽象层,提供基于消息驱动的 POJO。这个项目支持 Java 和.NET 连个版本。Spring Source 旗下的 Rabbit MQ 就是一个开源的基于 AMQP 的消息服务器。
Spring for Android:Spring for Android 为 Android 终端开发应用提供 Spring 的支持,它提供了一个在 Android 应用环境中工作、基于 Java 的 REST 客户端。
Spring Mobile:Spring Mobile 是基于 Spring MVC 构建的,为移动端的服务器应用开发提供支持。
Spring Web Flow:Spring Web Flow(SWF)一个建立在 Spring MVC 基础上的 Web 页面流引擎。
Spring Web Service:Spring Web Service 是基于 Spring 框架的 Web 服务框架,主要侧重于基于文档驱动的 Web 服务,提供 SOAP 服务开发,允许通过多种方式创建 Web 服务。
Spring LDAP:Spring LDAP 是一个用户操作 LDAP 的 Java 框架,类似 Spring JDBC 提供了 JdbcTemplate 方式来操作数据库。这个框架提供了一个 LdapTemplate 操作模版,可帮助开发人员简化 looking up、closing contexts、encoding/decoding、filters 等操作。
Spring Session:Spring Session 致力于提供一个公共基础设施会话,支持从任意环境中访问一个会话,在 Web 环境下支持独立于容器的集群会话,支持可插拔策略来确定 Session ID,WebSocket 活跃的时候可以简单地保持 HttpSession。
Spring Shell:Spring Shell 提供交互式的 Shell,用户可以简单的基于 Spring 的编程模型来开发命令。

6 Spring 相关资料
Spring 官方文档 Spring 参考文档 Spring 项目地址 Spring Boot 项目地址 Spring Boot 参考文档 Spring Cloud 参考文档 Spring maven 仓库

正文完
 0