1

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

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

然后我有

after()returning():newobject(){ 

在这里我想做不同的事情,具体取决于刚刚创建的对象是class1、class2还是class3,如果有一种方法可以在此时引用对象的类型而不必拆分切入点?

4

1 回答 1

5

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

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到变量名后,你可以用它做任何你喜欢的事情。

于 2013-05-05T14:13:01.093 回答