AspectJ 切入点深度解析与应用
1. 静态初始化切入点
在面向对象编程中,类的静态初始化是一个重要的环节。以 DVD 类为例,它是 Product 类的派生类。我们可以通过切入点来匹配 Product 和 DVD 类静态初始化器执行的时刻。示例代码如下:
pointcut staticInit() : staticinitialization(Product+);
before() : staticInit() {
System.out.println(thisJoinPoint.toLongString());
}
上述代码的输出结果为:
staticinitialization(static Product.<clinit>)
staticinitialization(static DVD.<clinit>)
Location and count = New Store
Title = Better Title
从输出可以看出,Product 类的静态初始化器先于 DVD 类执行,这符合我们对继承关系的预期,因为 Product 是 DVD 的父类。
2. 基于程序文本的指示器
在某些情况下,我们需要将连接点限制在特定的类类型上,这时可以使用 target 或 this 指示器。但使用这些指示器时,我们对类中连接点的匹配位置控制有限。cflow 指示器能提供更多控制,但如果 cflow 中定义的连接点方法调用了同一对象或不同对象的其他方法,仍然可能匹