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

时间:2013-05-05 11:15:12

标签: java aspectj

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

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

然后我

after()returning():newobject(){ 

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

1 个答案:

答案 0 :(得分:5)

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

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绑定到变量名后,您可以随意执行任何操作。