模块
Spring框架包含了很多特性,大约由20个模块组成。如下图所示,这些模块主要分成核心容器, 数据访问/集成,Web,面对切面编程(AOP),基础组件和测试。
核心容器
核心容器包含Core,Beans,上下文和表达式语言这些模块。 Core和Beans这两个模块是框架的基础,拥有IoC和依赖注入的特性。BeanFactory巧妙实现了 工厂模式,隐去了单例相关的代码,帮助您解除了配置信息和实际编程逻辑的依赖规范之间的耦 合。 上下文模块建立在由Core和Beans模块提供的坚实基础之上:这意味着以框架风格的方式来访问 对象跟JNDI注册是类似的。上下文模块继承了Beans模块的特性,并且增加了对国际化的支持 (如使用资源包),事件的预测,资源的加载和上下文隐式产物(如Servlet容器)。上下文模 块还支持“Java EE”特性,如EJB,JMX和基本远程调用。ApplicationContext接口处于上下文模 块的中心位置。 表达式语言模块提供了强大的表达式语言,在代码执行时可以用来查询和操作对象图。它是JSP 2.1规范中指定的统一表达式语言(统一EL)的一种扩展。这语言支持设置和获取属性值,属性 赋值,方法调用,访问数组、集合和索引的上下文,逻辑操作符和运算操作符,命名的变量,还 可以根据名称从Spring的IoC容器中获取对象。它也支持列表投影和选择,以及列表聚合。
数据访问/集成
数据访问/集成这层包含JDBC,ORM,OXM,JMS和事务模块。 JDBC模块提供JDBC抽象层,隐去了冗长乏味的JDBC代码,并为数据库厂商规定的错误代码进行了解析。 ORM模块把那些受欢迎的对象关系映射API封装在集成层,这些API包括JPA、JDO和 Hibernate。加入ORM包后,您可以使用任何O/R映射框架,同时还享有Spring框架所提供的其 他特性,譬如之前提到的简洁的声明式事务管理特性。 OXM模块提供了支持对象/XML映射实现的抽象层,这些实现包括JAXB,Castor,XML Beans,JiBX以及XStream。 Java消息服务(JMS)模块拥有制造和消费消息的特性。 事务模块为那些实现了特定接口的类和您所有的POJO提供程式化的和隐式的事务管理的支持。
Web
Web层包含Web,Web-Servlet,WebSocket和Web-Portlet模块。 Spring的Web模块拥有基本的面向Web集成的特性,譬如multipart附件上传功能,用servlet监听 器和面向Web应用上下文实现IoC容器的初始化。它也支持Spring的web相关部分的远程调用。 Web-Servlet模块内置了Spring的web应用的模型-视图-控制(MVC)实现。Spring的MVC框架 清晰隔离了领域模型代码和web表单,同时享有Spring框架所提供的其他特性。 Web-Porlet模块提供了用于portlet环境的MVC实现,以及镜像到Web-Servlet模块功能。
AOP和基础组件
Spring的AOP模块内置了符合联盟标准的支持自定义的面对切面编程的实现,比如,使用方法拦 截器和切入点可以清晰的解除那些实现了的并且应当分离的功能代码的耦合。您也能通过使用类 似于.NET元数据方式的源码层元数据功能合并行为信息到您的代码中。 独立的Aspects模块集成了AspectJ。 基础组件模块提供类代码的基础支持,实现了能够在特定应用服务器内使用的类加载器。
测试
测试模块集成了附带JUnit或者TestNG的Spring组件以支持测试。它支持Spring的 ApplicationContexts和对应上下文缓存的一致性加载。它还提供了模拟对象帮助您在隔离环境中 测试您的代码。
使用场景
无论是小应用,还是完全成熟的同时运用Sprin的事务管理功能和她的web框架集成的企业应 用,Spring依靠前文提及的构件块成为了这些场景下的一个合理选择。
标准spring的web应用场景Spring的声明式事务管理特性使得web应用具有完整的事务性,就如同您使用EJB容器来管理事 务一样。所有您定制的业务逻辑都可以用简单的POJO来实现,用Spring的IoC容器来管理。 Spring还提供了邮件发送和独立于web层的验证器(可以让您选择需要进行规则验证的地方)的 附加服务。Spring的ORM支持,集成了JPA,Hibernate和JDO;比方说,当您使用Hibernate 时,您可以继续使用您已有的映射文件和标准的Hibernate的SessionFactory配置。具有领域模 型的web层无缝集成了表单控制器,您的领域模型不再需要ActionForms,或者其他那些能把 HTTP参数转化成相应值的类。
使用第三方web框架的spring中间层依赖管理和命名约定
依赖管理和依赖注入是完全不同的概念。要在您的应用里获得Spring很赞的那些特性(譬如依赖 注入),您需要装配所有必要的库(jar文件)并在运行时(也可能在编译时)把这些库放到您 的类路径里。这些注入的依赖不是虚拟的部件,而是在您系统(代表性的)中的实际资源。依赖 管理的过程牵扯到资源的定位,储存以及如何把资源载入到类路径里。依赖可以是直接的(譬如 我的应用在运行时依赖于Spring),也可以是间接的(譬如我的应用依赖于commons-dbcp, 而commons-dbcp又依赖于commons-pool)。间接的依赖也被称为“传递”,这是那些最难识别 和管理的依赖。 如果您打算使用Spring,您要获得那些包含您所需的Spring部件的jar库副本。为了更容易给开发者使用,Spring由一系列模块打包而成,这些模块又尽可能分离它们的依赖。由此可知,假如您 不想要编写web应用,您可以不引入spring-web模块。当这个教程提到Spring库时,我们使用一 种速记的命名约定spring-*或者spring-*.jar,这里的*代表模块名的缩写(如spring-core,springwebmvc,spring-jms,诸如此类)。您实际使用的jar文件名通常是模块名后面跟着版本号(如spring-core-4.0.0.RELEASE.jar)。 每个Spring框架的正式版都会发布工件到下列位置: Maven Central,Maven查询的默认库,不需要任何特殊配置就可以使用。很多Spring依 赖的常用库也可以从Maven Central找到,而且很大一部分Spring社区用户使用Maven来 管理依赖,这对他们来说很便捷。这里的jar是以spring-*-.jar的形式命名的,对应的 Maven组id则是org.springframework。 专门用于托管Spring的公用Maven库。除了最终GA正式版外,这个库也托管开发快照版 和里程碑版。jar文件的命名规则和Maven Central是一致的。为了更容易被下载,这个库还包含打包了所有Spring的jar文件的分发zip文件。 因此您首先需要决定怎么管理您的依赖:我们一般推荐使用自动化系统,譬如Maven,Gradle或者Ivy,您也可以亲自手工下载所有的jar文件来进行管理。在这个章节的后面我们会进行详细说明。
Spring依赖和依赖Spring
Spring为众多的企业级和其他额外工具提供了集成和支持。尽管如此,她还是有意识的保持她的 强制依赖尽可能少。仅用Spring来构建简单的使用案例,您不应当去定位大量的jar库并下载(即 使是自动的)。基本的依赖注入只需要一个额外的强制依赖用于日志管理(后面会更加详细的介 绍日志选项)。 接着我们会描绘配置一个依赖Spring的应用所应遵循的基本步骤,依次会涉及到Maven,Gradle 和Ivy。所有案例里,如果有任何不清楚的,参考您的依赖管理系统相对应的文档,或者看一些 示例代码。Spring编译时,是用Gradle来管理依赖的,我们的示例大部分使用Gadle或者 Maven。
Maven依赖管理
如果您使用Maven来管理依赖,您甚至不需要显式提供日志依赖。比方说,创建一个应用上下 文,使用依赖注入来配置一个应用,您的Maven依赖如下所示
就是这样子。注意:如果您不需要跟Spring的API一起编译,scope可以声明为runtime,基本的 依赖注入的使用案例就是这种情况下的典型案例。
网友评论