1.简化Java开发
Spring是一个开源框架,它的根本使命在于简化java开发。为了降低java开发的复杂性,Spring采取了以下4种关键策略:
基于POJO的轻量级和最小侵入性编程
有很多框架强迫应用继承它们的类或实现它们的接口从而导致应用与框架绑死,而基于Spring构建的应用通常没有任何痕迹表明你使用了Spring,最坏的场景是一个类或许会用到Spring注解,但它依旧是POJO。
通过依赖注入和面向接口实现松耦合
任何应用都会由多个类相互协作完成业务逻辑,按照传统做法,每个对象负责管理与自己协作的对象的引用,这会导致代码高度耦合和难以测试。通过依赖注入(DI),对象的依赖关系由Spring负责管理,对象无需创建或管理它们的依赖关系,依赖关系将被自动注入到需要到它们的对象中去。通过面向接口,依赖能够用不同的具体实现进行替换。创建组件之间协作的行为通常称为装配,Spring通过应用上下文装载bean的定义并把它们组装起来,Spring应用上下文全权负责对象的创建和组装。Spring有多种应用上下文的实现,它们的区别在于加载配置的方式不同。
基于切面和惯例进行声明式编程
面向切面编程(AOP)能够将遍布应用各处的功能分离出来形成可重用的组件。AOP能够使诸如日志、事务管理和安全这些服务模块化,并以声明的方式将它们应用到需要它们影响的组件中去。这样这些组件会具有更高的内聚性并且会更加关注自身的业务。AOP能够确保POJO的简单性。
通过切面和模板减少样板式代码
Spring旨在通过模板封装来消除样板式代码。
2.容纳你的Bean
在基于Spring的应用中,应用对象生存于Spring容器中,Spring容器负责创建对象,装配它们,配置它们并管理它们的整个生命周期。Spring自带多个容器实现,可以归为两种不同的类型。bean工厂是最简单的容器,提供基本的DI支持。应用上下文基于BeanFactory构建,提供应用框架级别的服务,通常选择应用上下文作为Spring容器的实现。Spring容器中的bean的生命周期相对复杂,正确理解Spring bean的生命周期非常重要,因为你或许要利用Spring提供的扩展点来自定义bean的创建过程。
3.俯瞰Spring风景线
Spring的核心在于DI和AOP,Spring框架包含多个模块,为开发企业级应用提供了所需的一切,但开发者不必将应用建立在整个Spring框架之上,可以选择自身应用需求的Spring模块,当Spring不能满足需求时,也可以考虑其它选择,Spring提供了与其它第三方框架和类库的集成点。
Spring模块
Spring核心容器
容器是Spring框架最核心的部分,它管理Spring应用中bean的创建、配置和管理。该模块包括了Bean工厂和基于Bean工厂的多种Spring应用上下文的实现。除此之外,该模块提供了许多企业级服务,如E-mail、JNDI访问、EJB集成和调度。
Spring的AOP模块
这个模块是Spring应用中开发切面的基础,与DI一样,AOP可以帮助应用对象解耦。借助于AOP,可以将遍布系统的关注点(例如事务和安全)从它们所应用的对象中解耦出来。
数据访问与集成
通过JDBC编写代码通常会导致大量的样板式代码,Spring的JDBC和DAO模块抽象了样板式代码,使数据库代码变得简单明了。Spring也提供了ORM模块,Spring的ORM模块建立在对DAO的支持之上,并为多个ORM框架提供了一种构建DAO的简便方式,Spring集成了多个流行的ORM框架。本模块包含了在JMS之上构建的Spring抽象层,它会使用消息以异步的方式与其它应用集成。本模块还包含对象到XML映射的特性,它最初是Spring Web Service项目的一部分。除此之外,本模块会使用Spring AOP模块为Spring应用中的对象提供事务管理服务。
Web与远程调用
MVC模式是一种普遍被接受的构建Web应用的方法,本模块自带了一个强大的MVC框架,有助于在Web层提供应用的松耦合水平。该模块还提供了多种构建与其它应用交互的远程调用方案。Spring远程调用功能集成了RMI、Hessian、Burlap、JAX-WS,同时还自带了一个远程调用框架HTTP invoker。Spring还提供了暴露和使用REST API的良好支持。
Instrumentation
本模块提供了为JVM添加代理的功能。本模块的使用场景非常有限。
测试
Spring提供了测试模块以致力于Spring应用的测试。Spring为使用JNDI、Servlet和Portlet编写单元测试提供了一系列的mock对象实现。对于集成测试,该模块为加载Spring应用上下文中的bean集合以及Spring上下文的bean进行交互提供了支持。
Spring Portfolio
Spring Portfolio包括多个构建于核心Spring框架之上的框架和类库,包括Spring Web Flow(基于流程的会话式Web应用,如购物车、向导功能)、Spring Security(利用AOP,Spring Security为Spring应用提供了声明式的安全机制)、Spring Data(为多种数据库类型,无论是关系型数据库还是NoSQL数据库,都提供了一种简单的编程模型)、Spring Boot(简化Spring本身,Spring Boot大量依赖于自动配置技术,能够消除大部分Spring配置)。