Spring Framework是一个轻量级的解决方案,也是构建企业级应用的一种一站式服务。Spring是模块化的,容许您仅使用所需的部件,而无需使用其他的部件。能够单独使用IoC容器,并在其顶层使用任何web框架;也能够仅使用Hibernate集成代码或JDBC抽象层。Spring Framework支持声明式的事务管理、经过RMI或Web服务实现远程调用和各类手段的数据持久化。它提供了一个全功能的MVC框架,可以将AOP透明的继承到软件中。web
Spring被设计为非侵入式的,这意味着你的逻辑代码一般不依赖于框架自己。在集成层中(例如数据访问层),存在一些对于数据访问技术和Spring库的依赖。可是很容易将这些依赖与代码的其他部分隔离开来。spring
Spring Framework是一个Java平台,为开发Java应用程序提供全面的基础设施支持。 Spring处理基础设施,以便您能够专一于您的应用程序。数据库
Spring使您可以从“简单的Java对象”(POJO)构建应用程序,并将企业服务非侵入式应用于POJO。此功能适用于Java SE编程模型以及完整和部分Java EE。express
做为应用程序开发人员,您能够从Spring平台中获益如何:编程
Java应用程序——一个广义的名字,代指从受限的嵌入式应用程序到n层服务器端企业级应用程序——通常由对象以及它们之间的协做构成。所以,应用程序中的对象彼此之间拥有依赖关系。设计模式
虽然Java平台提供了丰富的应用程序开发功能,但它缺少将基本模块组织成总体的方法,并将该任务留给架构师和开发人员。虽然可使用工厂方法、抽象工厂、构建器、修饰器和服务定位等设计模式来组织构成应用程序的各类类和对象,可是这些设计模式仅仅是简单给出了名称的最佳实践、能够作什么,在哪里应用、解决什么问题等等。设计模式是形式化的最佳实践,你必须在你的应用程序中本身实现。数组
Spring Framework的控制反转组件提供将不一样组件组成完整、可用的应用程序的正式方法来解决上述问题。Spring Framework将形式化的设计模式编辑为能够集成在应用程序中的类的对象。缓存
“问题是,什么方面的控制是反转了?” Martin Fowler在2004年在他的网站上提出了关于控制反转(IoC)的问题。Fowler建议将其从新命名,使其更加自明,并提出了依赖注入。tomcat
Spring Framework的主要功能有大概20个模块组成。这些模块主要分为 核心容器、数据访问/集成、Web、AOP(面向切面编程)、Instrumentation、消息和测试,以下图所示。 服务器
核心容器包括spring-core, spring-beans, spring-context, spring-context-support, spring-expression模块。
spring-core和spring-beans模块提供了框架的基础部分,包括控制反转和依赖注入的功能。BeanFactory是工厂模式的复杂实现。它消除了编程单例的须要,并容许将依赖关系的规则和配置与实际的程序逻辑解耦。
Context(spring-context)模块创建在Core和Beans模块基础上:它提供一种获取对象的框架化方法,与JNDI注册类似。Context模块继承了Beans模块的功能,并增长了对国际化(使用,例如resource bundles)、事件传播、资源加载以及context的透明建立方法(例如Servlet容器建立context的方法)。Context模块还支持Java EE功能,例如EJB、JMX和basic remote。ApplicationContext接口是Context模块的焦点。spring-context-support为常见第三方库集成到Spring应用上下文提供支持,例如缓存(EhCache、Guava、JCache),邮件(JavaMail),调度(CommonJ,Quartz)和模版引擎(FreeMarker、JasperReports、Velocity)。
spring-expression模块提供了一个强大的表达式语言用于查询和维护运行时的对象图谱。它是JSP 2.1 规范中定义的 unified EL的扩展。它支持读取和设置属性值,property assignment(?),方法调用,数组、集合和索引集的方法、逻辑和算术运算符,命名变量和从Spring IoC容器中检索对象。它还支持列表的projection(?)和选择,列表的聚合。
spring-aop模块提供AOP联盟兼容的面向切面编程的实现,容许自定义方法拦截器和切入点,以便将其与功能代码解耦。使用源码级别的元数据功能,能够将行为信息合并到代码中,这种方法相似于.NET的属性。
单独的spring-aspects模块提供与AspectJ集成的功能。
spring-instrument模块提供了类instrumentation的支持和在指定应用服务器使用的classloader的实现。spring-instrument-tomcat模块提供Spring的tomcat instrumentation代理。
(Spring in action中对于instrument的论述:提供了为JVM添加代理的功能。具体来说,它为Tomcat提供了一个织入代理,可以为Tomcat传递类文件,就像这些文件是被类加载器加载的同样。这个模块使用场景很是有限。)
Spring Framework 4 包含spring-messaging模块,提供了从Spring集成项目中抽象出的关键功能,好比Message、MessageChannel、MessageHandler和消息应用的其余基础服务。该模块还包括一系列注解,用于将消息映射到方法,与Spring MVC的编程模型的注解类似。
数据访问/集成层由 JDBC, ORM, OXM, JMS, 和 Transaction 模块组成。
spring-jdbc 模块提供一个JDBC抽象层,用于消除JDBC的冗长代码并解析数据库厂商的特定错误代码。
spring-tx 模块支持经过实现特定的接口来管理编程式和声明式的事务管理,对全部POJOs均适用。
spring-orm 模块对流行的对象-关系映射API(包括JPA、JDO和Hibernate)提供集成层。使用spring-orm模块可使用上述的ORM框架与Spring其它特性结合使用,例如上文提到的简单声明式的事务管理功能。
spring-oxm 模块提供一个抽象层支持Object/XML映射的实现包括JAXB、Castor、XMLBeans、JiBX和XStream。
spring-jms 模块(Java Messaging Service)包括生产和消费消息的主要功能。从4.1开始,支持与spring-messaging 模块的集成。
Web 层由 spring-web, spring-webmvc, spring-websocket, 和 spring-webmvc-portlet 组成 。
spring-web 模块提供了基本的面向 web 开发的集成功能,例如文件上传、使用Servlet监听器和面向对象的应用上下文初始化IoC容器。它同时包含HTTP 客户端和Spring远程访问支持的web相关部分。
spring-webmvc模块(也被称为web-servlet模块)包含了web应用中MVC和REST Web服务实现。实现了domain model代码和web 表单之间的彻底分离,而且能够与框架的其它功能集成。
spring-webmvc-portlet模块(也被称为web-portlet模块)提供了Portlet环境中的MVC实现和面向Servlet的spring-webmvc模块的功能镜像。
spring-test模块支持经过JUnit或TestNG来进行单元测试和集成测试。它提供了常量加载和缓冲Spring应用上下文的功能。也提供模拟对象,用于隔离测绘代码。