Spring框架参考文档

模块
Spring框架包含了很多特性,大约由20个模块组成。如下图所示,这些模块主要分成核心容器, 数据访问/集成,Web,面对切面编程(AOP),基础组件和测试。


spring 框架概览

核心容器

核心容器包含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,基本的 依赖注入的使用案例就是这种情况下的典型案例。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容