读书人

Spring in Action 其次版 读书笔记

发布时间: 2012-11-08 08:48:11 作者: rapoo

Spring in Action 第二版 读书笔记

Spring in Action 其次版 读书笔记

?

下面这部分摘抄自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的这些名词,借助书本上的例子来帮助记忆。例子是电厂派抄表工查某一片区用户的用电情况。如下图:

    Spring in Action 其次版 读书笔记

    目前的AOP框架有3个:
      AspectJ(可以对属性和构造 数的切入) (推荐使用的)JBoss AOPSpring AOP
    Spring生成被代理类的方法有两种:
      如果目标类实现了一个接口、则使用java.lang.reflect.proxy类来为目标类织入通知(优先)如果是普通类、则通过生成它的子类、达到代理的目的;(参代理模式)

????? 前面的方法设置麻烦,且对被代理的Bean(切入点所处的Bean)要求高(需花实现指定的Proxy Factory Beam).于是导致了自动代理的出现。
自动代理中、Java1.5以后的版本,有“自动代理@Aspect J切面:简单易用、对被代理的Beam没有入侵。将切面加在一个切面类和配置中(caop:conf:g>)。详细方法这里不说了。

?

读书人网 >软件架构设计

热点推荐