内容简介目录 本书着眼于AOP范例的全面介绍,可作为一本完整的AspectJ语言手册,以及针对客户当前和未来项目的AOP和AspectJ使用指导。 通过代码片断和全面解释,对所有的aspect概念进行说明。掌握了AspectJ的概念之后,我们再给出大量的例子来阐述如何利用AOP解决实际问题。 本书的Web站点提供了书中的所有代码,网址是www.wiley.com/compbooks/aradecki。网站上有一个包含第个章节的代码的压缩文件。本书中的示例是通过Java SDK 1.4版本创建的(必须安装Java SDK)。除了Java之外,还有AspectJ编译器及运行时组件(这些组件可以在www.eclipse.org/aspectj上找到)。 第1章 AOP简介1.1 00P把我们带到了何处1.2 AOP如何解决OOP问题1.2.1什么是AOP1.2.2 AOP的开发过程1.3 结束语第2章 实现AOP2.1 AOP语言剖析2.1.1 AOP语言规范2.1.2 AOP语言的实现2.2 AspectJ2.3 结束语第3章 AspectJ的获取和安装3.1 AspectJ的要求3.2 下载AspectJ3.3 安装AspectJP3.3.1 设置PATH3.3.2 设置CLASSPATH3.4 安装测试3.5 结束语第4章 实现AspmJ4.1 我们的首个AspectJ程序4.1.1 首先编写组件4.1.2 aspect代码4.1.3 识别连接点4.1.4 确定poincut4.1.5 提供advice4.1.6 增加一个aspect4.1.7 编译和执行这个例子4.2 添加一个新的关注点4.2.1 返回文本的方法4.2.2 把返回方法记入日志4.2.3 一个新的首要关注点4.3 暴露的上下文4.4 类型间声明4.5 aspect粒度4.6 AspectJ编译器功能4.6.1 指定源目录4.6.2 用JAR进行织人4.6.3 指定输出到一个JAR文件4.6.4 创建和使用aspect库4.6.5 阻止织人4.6.6 使用渐进式编译4.7 结束语第5章 AspectJ连接点5.1 动态连接点模型5.2 AspectJ连接点5.3 连接点签名5.4 模式5.4.1类型名称模式5.4.2 子类型模式5.4.3 抛出模式5.4.4 类型模式5.5 反射5.5.1 thisJoinPoint方法5.5.2 thisJoinPointStaticPart方法5.6 连接点示例5.6.1 方法调用接收和执行5.6.2 构造函数的调用接收/执行以及对象初始化5.6.3 字段获取/设置5.6.4 异常处理程序执行5.6.5 类初始化5.7 结束语第6章 AspectJ pointcut6.1 三个类的介绍6.2 建立oointeut6.3 使用指示符6.3.1 指示符快速参考6.3.2 使用逻辑运算符来创建指示符组合6.4 组合pointcut6.4.1 方法相关的pointeut6.4.2 异常处理指示符6.4.3 与域有关的指示符6.4.4 基于状态的指示符6.4.5 基于控制流的指示符6.4.6 类初始化指示符6.4.7 基于程序文本的指示符6.4.8 基于动态属性的指示符6.4.9 adviceexecution6.4.10 preinitialization6.4.11 处理接口6.4.12 匿名pointcut6.4.13 在类中使用aspect6.4.14 创建Factory对象6.4.15 捕获Java库调用6.4.16 访问final属性6.4.17 异常模式6.5 结束语第7章 advice7.1 advice的定义7.1.1 将信息添加到Stem.out.println()中7.1.2 advice7.1.3 形式定义.7.2 所有类型advice中普遍存在的问题7.2.1 将上下文导人advice中7.2.2 advice与异常7.3 advice的类型:概述7.4 before advice7.5 after advice"7.5.1 after advice(无限制型)7.5.2 after抛出7.5.3 after returning7.6 around advice7.6.1 对getProperty()调用进行替换7.6.2 proceed()7.7 advice的优先级7.7.1 优先级的重要性7.7.2 优先级的决定方法7.7.3 运行期执行7.7.4 伪优先级7.8 结束语第8章 类型间声明8.1 类型间声明的简单例子8.1.1 向类中添加方法8.1.2 引入和advice8.2 类型间成员:机制8.2.1 类型间成员的类型8.2.2 类型间声明的目标8.2.3 访问控制8.2.4 成员间的冲突8.3 declare parents8.3.1 添加一个简单的接口8.3.2 declare parents:机制8.4 带有具体成员的接口8.4.1 重构Persistence解决方案8.4.2 带有具体成员的接El:机制8.4.3 带有具体成员的接口的可能性8.5 声明优先级8.5.1 一个优先级的例子8.5.2 声明优先级:机制8.5.3 迂回问题8.5.4 优先级的效果8.6 其他静态横切8.6.1 静态可确定的pointcut8.6.2 自定义编译消息8.6.3 软化异常8.7 结束语第9章 aspec9.1 aspect结构9.2 aspect扩展9.2.1 构建抽象aspect9.2.2 从类和接口中继承9.3 aspect实例化和联合9.3.1 单独的aspect9.3.2 基于每对象的aspect9.3.3 基于每控制流的aspect9.4 aspect支配和优先级9.5 访问aspect对象9.6 aspect特权9.7 结束语第10章 AspecO的开发应用10.1 采用AspectJlO.1.1 采用AspectJ的缘由10.1.2 如何将AspectJ应用到过程中10.1.3 前期开发工作10.1.4 取消AspectJ10.2 开发使用10.2.1 跟踪10.2.2 条件检查10.3 生产aspect10.3.1 日志和计时10.3.2 授权10.4 结束语第11章 使用AspectJ工具11.1 AspectJ编译器选项11.2 aspect结构浏览器11.3 使用AspectJ IDE扩展11.3.1 JBuilder"11.3.2 Forte与NetBeans11.3.3 Emacs 11.3.4 Eclipse11.4 Ant 11.5 调试AspectJ11.5.1 aidb命令行指南11.5.2 aidb GUI指南11.6 使用ajdoc 11.7 结束语第12章 错误处理和一般问题12.1 编译错误12.1.1 错误的编译器12.1.2 无法找到aspectjtools.jar文件12.1.3 内存溢出错误12.1.4 错误的JSDK12.1.5 没有Java编译器12.2 扩展运行时错误处理12.2.1 堆栈溢出12.2.2 连接点不匹配12.3 异常抛出与捕获12.4 使用TraceJoinPoints.java12.5 call指示符与execution指示符的区别12.5.1 this()和target()的使用12.5.2 within和withincode的效果12.6 结束语第13章 面向aspect例子:模式与重用13.1 可重用持久性13.1.1 PersistencePmtocol aspect13.1.2 通过subaspect应用PersistenceProtocol13.2 方法缓存13.3 将模式标记为aspect13.3.1 往aspect的API中添加无效特性13.3.2 Observer模式13.3.3在 AspecU中重用Observer13.4 面向方面的设计13.5 结束语第14章 AspeeO在现实中的应用14.1 添加特性14.1.1 初始应用程序14.1.2 待添加的特性14.1.3 当前设计14.1.4 软件的可继承性14.1.5 编写aspect和源代码14.1.6 测试14.1.7 文档14.1.8 结论14.2 重构网络结构14.2.1 logging14.2.2 计时14.2.3 检查点14.3 结束语附录A AspectJ APIA.1 接口层次关系A.2 类层次关系A.3 AspectJ API说明A.3.1 接口:J0inPointA.3.2 接口:J0inPoint.StaticPartA.3.3 接口:SignatureA.3.4 接口:CatchClauseSignatureA.3.5 接12I:MemberSignatureA.3.6 接口:CodeSignature A.3.7 接口:AdviceSignatureA.3.8 接口:InitializerSignatureA.3.9 接口:MethodSignatureA.3.10 接口:FieldSignatureA.3.11 接口:SourceLocationA.3.12 类:SoftExceptionA.3.13 类:NOAspectBoundException附录B 有帮助的Web站点B.1 概述性站点B.2 人物B.3 自然教程B.4 论文B.5 其他范例B.6 软件开发和系统B.7 事件B.8大学附录C 其他AoP语言绑定 C.1 AspectRC.1.1 说明C.1.2 要求C.1.3 例子代码C.2 AspectSC.2.1 说明C.2.2 要求C.3 ApostleC.3.1 说明C.3.2 要求C.4 AspectCC.4.1 说明C.4.2 要求C.4.3 例子代码C.5 AspectC++C.5.1 说明C.5.2 要求C.5.3 例子代码C.6 PythiusC.6.1 说明C.6.2 要求C.6.3 例子代码