快速业务通道

AOP@Work: 用AspectJ进行性能监视,第2部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

public class ClinicController extends MultiActionController  implements InitializingBean { ...  public ModelAndView welcomeHandler (HttpServletRequest request,   HttpServletResponse response) throws ServletException {    return new ModelAndView ("welcomeView");  } ...  public ModelAndView ownerHandler(HttpServletRequest request,   HttpServletResponse response) throws ServletException {     Owner owner = clinic.loadOwner(      RequestUtils.getIntParameter(request, "ownerId", 0)); ...     model.put ("owner", owner);     return new ModelAndView ("ownerView", "model", model);  } ...

当然,可以容易地扩展这种方法以处理其他的框架,包括自定义框架,甚至 前 面描述过的用 XML 定义的方面。

AOP@Work: 用AspectJ进行性能监视,第2部分(5)

时间:2011-09-07 IBM Ron Bodkin

编写可移植的方面

注意 StrutsMonitor 方面像我的大多数监视方面一样,设计为针对常见组件 的多个版本。它的切点匹配不同版本的 Struts,它们可以引入那些在织入时( 例 如在装载时)还不可用的类型。只需在像字段签名或者类型模式这样的静态可解 析的上下文中使用类名就可得到这样的切点。如果在动态上下文中(如 this、 target 或者 args)中使用类名,那么就要求织入器能够访问类型。注意 Struts 监视器将 this 切点指示符绑定到 Object 的一个实例,这不需要有 Struts JAR 。虽然有些别扭(因为它失去了编译时类型检查的好处),但是这种方法对于部 署可重用方面时要求有许多依赖库的情况更有利。

不过,引用类或者访问其成员的(如通过调用一个方法)的建议或者其他可 执 行代码需要遵守 Java 代码的常规可移植性规范。如果建议必须调用在 API 的 不 同版本中有变化的方法,那么可以使用 Java 反射检查是否有不同的方法并执行 它们,例如,对一个操作方法显式地调用 perform() 或者 execute()。注意, 如 果只想在一个 around 建议中的连接点处使用原来的 execute() 或者 perform () 方法,那么 AspectJ 会替我处理这种情况,不需要做任何特别的工作。实际上 , 许多 API 都提供了向后兼容性,因此可以针对要支持的老版本编译,它在新版 本 中也能工作。

通常,方面不会执行触发装载一个类的代码,除非程序的执行总是会装载这 个 类,例如,引用一个类的建议在这个类要执行时会被触发。保留这个属性对于涉 及可选类的库方面很重要。对于 Glassbox Inspector,我不想让被监视的应用 程 序加入可能监视的某个版本的 Struts 或者其他库。

监视 JSP 和应用程序名

清单 4 展示了重构后的本文第 1 部分中的 ServletMonitor,它使用抽象操 作监视器作为一个基本方面。我通过扩展 classControllerExec() 继续按类跟 踪 Servlet。增加了通过监视 jspService() 方法对监视 JSP 的支持。因为我想要 确定 Web 应用程序的名字,因此设置 ServletMonitor 覆盖 getContext() 方 法 以检查 Servlet 上下文的名字。

我到目前为止所实现的所有其他 Web 应用程序最终是由 Servlet 调用的, 因 此只有这些控制器需要提供应用程序上下文的一个实现。特别是,我的 Web 应 用 程序框架监视器是嵌套在它们的分派 Servlet 调用中的。在进一步扩展 Glassbox Inspector 以监视其他操作(如收到的 Web 服务请求)时,将需要提 供操作名作为不同应用程序的上下文。如果要扩展框架以监视收到的 JMS 消息 或 者 EJB 请求,那么这个框架还要为那些资源提供应用程序上下文。

清单 4. 扩展 ServletMonitor

public aspect ServletMonitor ext

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号