AOP@Work: 使用AspectJ 5检验库方面 - 编程入门网
见。您推荐了另外一种库方面 ObserveThrownContext,使其可重写 getPerJoinPointMessage(Throwable, JoinPoint)。这在 ObserveThrown 中并 非 默认,原因是对联结点的反射访问既耗时间、又费空间 —— 在抛出异常时这或 许并不重要,但出于连续跟踪的考虑,应尽量避免。
Gail 检查了 ObserveThrownContext。它的独特之处是获取联结点上下文以 用 于日志消息中,如清单 7 所示: 清单 7. 添加联结点上下文
Connor 对类层次结构的思考 Connor 希望将大部分 ObserveThrownContext 和 ObserveThrown 的实现置 于 一个通用的超类 ThrownObserver 中。这有利于得到一种 Gail 可理解的小方面 。 但 Connor 怀疑 ObserveThrownContext 是否能够扩展 ObserveThrown 或者 反之。您对他解释,具体类只能扩展抽象类。此外也没有什么重写通知的好方法 。有时您可以将通知重构为方法,但在本例中,需要特殊形式的 thisJoinPoint ,因此无法实现。Zed 在实践中得到了这样的结论:如果超方面中包含通知,那 么仅能提供一到两个超方面层。 多亏 Gail 及时插话,才使 Zed 未得出危险的结论。她指出这组方面足以完 成大多数普通的日志记录,惟一不能处理的就是对信息在联结点不可用处的特殊 日志记录。有了方面,日志记录比以前更易管理,而在此之前,她必须要进行大 范围的更改。 Holly 坚持缓存 Holly 是一个什么东西都不肯扔掉的人,她把每样东西都收得妥妥贴贴,觉 得 总有一天会用到。她也是一名出色的 Java 程序员,因此 Zed 要求她尝试缓存 不 同的内容,以观察对性能的影响。在与她交谈后,您提供了 3 种用于缓存的方 面 ,如表 4 所示: 表 4. 缓存方面
AOP@Work: 使用AspectJ 5检验库方面(7)时间:2011-09-07 IBM Wes Isberg自由关联 这些缓存方面的不同之处在于值与缓存的关联方式:利用切入点、方面实例 化 与映射的某种结合。 CacheToString 与之前提到的方面相似,要求 Holly 编写类似于 within (com.magickingdom..*) 的 scope 切入点。Buddy 指出 CacheToString 是一个 perthis 方面,因此方面的一个实例与任何实现 toString() 的类的各实例相关 联。缓存值存储在方面本身内,方面则仅与 toString() 方法执行进行协作。 相反,CacheMethodResult 实例化为处理任意方法的单体方面,返回给定类 型 。由于 CacheMethodResult 的子方面是与许多缓存值协作的单体,所以各方面 使 用映射将缓存值与给定联结点关联。在设计方面,任何缓存方面都涉及将逻辑置 于键内及将逻辑置于切入点和方面实例化内之间的权衡。CacheMethodResult 使 子方面能够重写切入点和为结果创建键的方法,因此 Holly 可在顾及其程序的 情 况下做出权衡。在一种情况下,切入点仅可辨别出一种静态方法,这也就意味着 在实现键时,仅有一种参数是相关的。另外一种子方面切入点可辨别不同对象的 多种实例方法,使目标对象和方法签名也与键相关。 在尝试缓存时,Holly 非常喜爱 CacheMethodResult 的一般性,但她也希望 利用切入点获得更紧密的 CacheToString 关联。若每次构建一个键并使用映射 , 代价将非常高昂。在调试时,通过子方面类型即可明确缓存了哪 |
||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |