使用Scala中的aspectj修改方法参数值

时间:2015-02-17 10:41:02

标签: scala aspectj

我有一种情况需要在scala中使用aspectj修改方法参数值。我正在使用@Before注释来获取字段。

 @Before("execution (* com.myapp.EmployeeController.delete(..))")
  def checkIfWorkflowEnabled(joinPoint: ProceedingJoinPoint): Object = {
    //get the fields and modify oen field
    //check some condition and if success, update the isActive field to false
    //then proceed with what was going on before
  }

我的控制器方法:

def delete(id:Long, isActive:Boolean)= {
???
}

但是我无法使用aspectj更新字段'isActive'。

编辑:

正如Andy所说,我明白我们只能在around方法中修改方法args。现在,我有另一个疑问。在around方法中,是否会在实际方法调用之前和之后执行方面?如何在执行delete方法之前修改方法args然后像往常一样继续。完成delete方法后,调用其他一些方法。?

1 个答案:

答案 0 :(得分:0)

before()和after()建议不能修改在连接点发生的事情,他们只能观察它。 around()建议会做你需要的。类似的东西:

void around(long l,boolean b): execution(* delete(..)) && args(l,b) {
  if ((l%2)==0) {
    proceed(l,b);
  } else {
    proceed(l,!b);
  }
}

抱歉,我是用代码风格写的,我对此更为熟悉。这可以使用注释样式,但您需要使用其他变量ProceedingJoinPoint来调用继续:http://www.eclipse.org/aspectj/doc/released/adk15notebook/ataspectj-pcadvice.html