我有一种情况需要在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方法后,调用其他一些方法。?
答案 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