下面这部分摘抄自Spring In Action书的p4-p6---------------------------------
核心容器
图 1.1 的最底层是核心容器。 Spring 核心容器为 Spring 框架提供了基础功能。在这个模块中你会找到 BeanFactory 这个类,它是最基本的 Spring 容器和 Spring 的 DI 所依赖的基础。
从第 2 章开始,贯穿整本书,当遇到使用 DI 来装配 Bean 的时候,我们都会讨论核心模块 ( 任何 Spring 应用的核心 ) 。
Application Context( 上下文 ) 模块
Spring 的应用上下文建立在核心容器之上。 BeanFactory 使 Spring 成为容器,而上下文使 Spring 成为框架。这个模块扩展了 BeanFactory ,添加了对 I18N( 国际化 ) 、应用生命周期事件以及验证的支持。
另外,这个模块提供了很多企业级服务,如电子邮件服务、 JNDI 访问、 EJB 集成、远程调用以及定时服务,并且支持与模板框架 ( 如 Velocity 和 FreeMarker) 的集成。
Spring 的 AOP 模块
在 AOP 模块中, Spring 对面向切面编程提供了丰富的支持。这个模块是为 Spring 应用开发切面的基础。与 DI 一样, AOP 支持应用对象之间的松耦合。利用 AOP ,应用程序所关心的与其应用的对象关系不大。
Spring 的 AOP 模块提供了多种方法来建立切面,包括基于 AOP Alliance 接口 (http://aopalliance.sf.net) 的切面的建立和对 AspectJ 的支持。第 4 章将深入讨论 Spring 的 AOP 支持。
JDBC 抽象及 DAO 模块
Spring 的 JDBC 和 DAO 模块把要写的样板代码抽象出来,让你的数据库代码变得简单明了,也可以避免因为释放数据库资源失败而引起的问题。这个模块还建立了一个容易理解的数据库异常层,它建立在各种数据库错误信息之上。以后就不用再去解释那些隐晦专有的 SQL 错误信息了。
另外,这个模块利用 Spring 的 AOP 模块为 Spring 应用中的对象提供事务管理服务。
在第 5 章中讨论 Spring 数据访问时,我们将看到 Spring 的基于模板的 JDBC 抽象层是如何简化 JDBC 代码的。
ORM 映射集成模块
Spring 为那些喜欢使用 ORM(Object-relational mapping) 工具的开发人员提供了 ORM 模块。 Spring 的 ORM 支持建立在 DAO 支持之上,并可以方便地构建适合几个 ORM 解决方案的 DAO 。 Spring 不想实现自己的 ORM 解决方案,但是它为许多流行的 ORM 框架做了钩子程序,包括 Hibernate 、 Java Persistence API 、 JDO 和 iBATIS SQL 映射。 Spring 的事务管理支持所有这些 ORM 框架以及 JDBC 。
Spring 除了提供基于模板的 JDBC 抽象,还提供了类似的 ORM 抽象和永久的框架,这些内容将在第 5 章讨论。
Java 管理扩展 (JMX)
如何方便地展现 Java 应用的内存工作流以便于管理,这是构建应用产品准备的关键部分。 Spring 的 JMX 模块可以方便地展现应用 Bean ,就像 JMX Mbeans 。这样一来,就可以监控和重新配置运行中的应用程序。
我们将在第 12 章详细讨论 Spring 的 JMX 支持。
Java EE 连接器 API(JCA)
企业级应用包括运行在不同服务器和平台上的应用。集成这些应用程序需要一些技巧。 Java EE 连接 API( 也称为 JCA) 提供了一种标准的方法来集成 Java 应用和多种企业信息系统,包括主框架和数据库。
JCA 很多方面与 JDBC 一样,唯一的区别是 JDBC 主要是针对数据库访问,而 JCA 更多是关注连接遗留系统的通用 API 。 Spring 对 JCA 的支持类似于其对 JDBC 的支持,提取出 JCA 的样本代码插入到模板中。
Spring MVC 框架
Spring 为 Web 应用提供了全功能的 MVC(Model/View?Controller) 框架,比如用户界面与应用逻辑是分离的。 Java 有很多类 MVC 框架可选择,例如 Apache Struts 、 JSF 、 WebWork 和 Tapestry 。
虽然 Spring 可以集成多种其他 MVC 框架,但是 Spring 也提供了自己的 MVC 框架,它改进了 Spring 在应用 Web 层的松耦合技术。
在第 13 章和第 14 章,我们将深入讨论 Spring MVC 。
Spring Portlet MVC
多数 Web 应用都是基于页面的――也就是说,每个对应用的请求都会实现一个完全新的页面。每个页面都呈现特定的信息或特定的表单来提示用户。基于 portlet 的应用在一个 Web 页面上聚集多个功能,这样在一个页面中一次就可以提供多个应用。
如果想创建基于 portlet 的应用,最好是利用 Spring 的 Portlet MVC 框架。 Spring Portlet MVC 建立在 Spring MVC 基础上,提供了一套控制器来支持 Java portlet API 。
Spring 的 Web 模块
当装载 Spring 应用上下文时, Spring MVC 和 Spring Portlet MVC 需要一些特殊的考虑。 Spring 的 Web 模块提供了支持 Spring MVC 和 Spring Portlet MVC 的类。
Web 模块还提供了几个支持面向 Web 的任务,例如多部分 文件上传 和编程绑定到业务对象的请求参数。它还包含了对 Apache Struts 和 Java Server Faces(JSF) 的集成支持。
远程调用
所有应用都不是孤立的。通常,一个应用必须利用另一个应用的某些功能。当通过网络来访问其他应用时,某些形式的远程调用将被用于通讯。
Spring 的远程调用允许将 Java 对象的某些功能展现为远程对象。如果需要远程访问对象,远程调用模块会使编写远程对象很简单,就像它们是本地 POJO 一样。有一些远程调用选项,包括 RMI(Remote Method Invocation ,远程方法调用 ) 、 Hessian 、 Burlap 、 JAX-RPC 和 Spring 自己的 HTTP Invoker 。
在第 8 章中,我们将详细讨论 Spring 中的多种远程调用选项。
Java 消息服务 (JMS)
远程调用是邓决于网络可靠性和通讯双方的可用性。基于消息的通讯是可靠的,并且即使在网络和端点不可用时,可以保证消息的传递。
Spring 的 Java 消息服务 (Java Message Service) 模块可以将消息发送到 JMS 队列和主题。同时,这个模块还能帮助创建消息驱动的 POJO ,它能够处理异步消息。在第 10 章,我们将详细讨论 Spring 的消息发送机制。
虽然 Spring 包括很多内容,但是最重要的是要认识到 Spring 尽可能避免了重新开发所有事情。 Spring 倾向于保留现有的 API 和框架。
上面这部分摘抄自Spring In Action书的p4-p6---------------------------------
第一章 开始 Spring 之旅
-
DI 的作用是将程序解耦。程序 A 在调用程序 B/C 时,不需要知道 B/C 是如何来的,只需要按照接口定义使用即可。 PS :之前的 service+ 简单工厂方法也可达到这个效果。但 spring 可在 XML 中配置。
-
AOP 的信用有点类似代理模式。 AOP 可以在类 A 不知情的情况下,为 A 增加新的功能。与代理模式不同, AOP 是在 XML 中配置的。
第二章 基本Bean装配
-
Spring的容器有多种容器实现。分两类:1、Bean工厂;2、应用上下文。Bean工厂简单,提供了基础的依赖注入支持。应用上下文则比Bean工厂更高级。
- 提供文本信息解析工具,包括对国际化支持。
- 提供载入文件资源的通用法。
-
可向注册为监听器的Bean发送事件。
- Bean有自动装配属性功能、awtowire、可以byName、byType…..但这会导致XML文件的可续性降低。
- 关于Bean的范围,请参考下表。
范围 | 完成任务 |
singleton | 定义Bean的范围为每个Spring容器一个实例(默认值) |
prototype | 允许Bean可以被多次实例化(使用一次就创建一个实例) |
request | 定义Bean的范围是HTTP请求。只有在使用有Web能力的Spring上下文(例如Spring MVC)时才有效 |
session | 定义Bean的范围是HTTP会话。只有在使用有Web能力的Spring上下文(例如Spring MVC)时才有效 |
global-session | 定义Bean的范围是全局HTTP会话。只有在portlet上下文中才有效 |
第三章 高级Bean装配(跳过)
第四章 通知Bean
-
AOP述语包括①通知(AOP切面的功能和切面执行任务的时机);②连接点、(AOP涉足其它对象的切入点);③切入点(对象的被介入的具体地方);④切面=通知+切入点;⑤引入(可为现有Bean)引入另一个类的某个方法;⑥目标(AOP要介入的对象);⑦代理(user通过代理来调用目标);⑧织入(将目标与代理连接起来的过程)
为了更好的了解AOP的这些名词,借助书本上的例子来帮助记忆。例子是电厂派抄表工查某一片区用户的用电情况。如下图: -
目前的AOP框架有3个:
- AspectJ(可以对属性和构造 数的切入) (推荐使用的)
- JBoss AOP
-
Spring AOP
-
Spring生成被代理类的方法有两种:
- 如果目标类实现了一个接口、则使用java.lang.reflect.proxy类来为目标类织入通知(优先)
- 如果是普通类、则通过生成它的子类、达到代理的目的;(参代理模式)
前面的方法设置麻烦,且对被代理的Bean(切入点所处的Bean)要求高(需花实现指定的Proxy Factory Beam).于是导致了自动代理的出现。
自动代理中、Java1.5以后的版本,有“自动代理@Aspect J切面:简单易用、对被代理的Beam没有入侵。将切面加在一个切面类和配置中(caop:conf:g>)。详细方法这里不说了。