点击进入我的博客
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仓库
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。