在Aspect中获取目标Object并在目标对象上调用另一个方法

时间:2015-02-25 12:24:34

标签: java aspectj

我想在方法切入点上编写一个方面,在这个方面我想使用调用切入点方法的对象调用另一个方法。

这样的事情:


@Pointcut("@annotation(com.mypackage.Notify(getC))")
public void notifyPointCut() {
}

@AfterReturning(value = "notifyPointCut(getC)", argNames = "joinPoint") 
public void notifyChange (JoinPoint joinPoint) {
  Object targetObject  = joinPoint.getTarget();
  C cField = targetObject.invokeMethod("getC");
  notifier.sendUpdate(cField);
}

我想获取调用joinPoint方法的对象,并对该对象进行另一个方法调用(在注释中传递的方法名称)

我的用例是获取对象的某些字段,这些字段由joinPoint方法创建或更新。一旦joinPoint方法返回,我想获取方面中的那些字段并发送字段值的通知。

我不确定我是否因为在搜索时无法找到这样的用法而使方面使用太复杂。

1 个答案:

答案 0 :(得分:3)

我想出了如何调用该方法。我需要获取方法并调用它,然后我不需要为类进行强制转换。


Object targetObject  = joinPoint.getTarget();
Method m = targetObject.getMethod("getC");
m.invoke(targetObject);