用于调用不同类的构造函数的AspectJ切入点——标识所创建对象的类型



我正在使用AspectJ,并且定义了一个切入点来捕获几个类的构造函数方法的执行,如下所示:

pointcut newobject(): execution(class1.new(..) || class2.new(..) || class3.new(..));

然后是

after()returning():newobject(){ 

,这里我想做不同的事情,这取决于刚刚创建的对象是class1, class2,还是class3是否有一种方法可以在不拆分切入点的情况下引用对象的类型?

切入点语法错误。不能在一个execution切入点内链接多个方法或构造函数模式。相反,您需要链接多个execution切入点,或者,如果可能的话,使用像MyClass*这样的小丑来捕获多个。一个小例子:

pointcut newobject(Object createdObject) :
    (execution(class1.new(..)) || execution(class2.new(..)) || execution(class3.new(..)))
        && this(createdObject);
after(Object createdObject) : newobject(createdObject) {
    System.out.println(thisJoinPoint);
    System.out.println(createdObject);
    System.out.println(createdObject.getClass());
}

this绑定到变量名之后,您可以对它做任何您喜欢的事情。

最新更新