用AspectJ构造方面库
2010-03-18 00:00:00 来源:WEB开发网2.AspectJ对方面库的技术支持
方面库的实现在于切入点的实例化方式。AspectJ对切入点定义方法的支持导致了两种完全不同的方面库实现方法--使用抽象方面(abstract aspect)的方法和使用注释的方法。本章将详细介绍这两种方式。
AspectJ是Java语言的扩展。方面在AspectJ语言中用aspect关键字标示,它类似于Java类,可以定义成抽象的,也存在继承关系。切入点在AspectJ语言中用关键字pointcut标示,它有一套完整的语法来描述切入点,也可以定义成抽象的,即没有实际定义的切入点。抽象 pointcut只能定义在抽象方面中。如清单 1所示,抽象方面A里面定义了一个抽象pointcut名叫publicCall。抽象方面如同抽象类一样,可以被继承,继承抽象方面的方面必须重载抽象 pointcut,即赋予抽象pointcut实际的定义。如清单 2所示,方面B继承了抽象方面A,重载了名叫publicCall的pointcut,给它一个具体的定义。
清单 1 抽象方面
public abstract aspect A {
abstract pointcut publicCall(int i);
}
清单 2 继承抽象方面的子方面
public aspect B extends A {
pointcut publicCall(int i): call(public Foo.m(int)) && args(i);
}
AspectJ对继承和抽象的支持正是我们构造方面库的基础。抽象方面包含抽象的切入点和具体的通知,正符合方面库的特征,可以使用抽象方面来构造方面库文件。继承抽象方面的子方面必须具体化切入点,可以把它当作方面库在具体应用程序中的实施。为了加深理解,我们将在接下来的章节中使用抽象方面技术制作一个简单的记录踪迹的方面库,并扩展它以应用到具体项目中。
更多精彩
赞助商链接