Java Aspectj覆盖方法的参数

Java Aspectj覆盖方法的参数,java,aop,aspectj,spring-aop,Java,Aop,Aspectj,Spring Aop,我正在开发一个方面来检查setter方法的参数并用null值覆盖空字符串。这是我目前的状态: @Before("execution(* de.foo.entity.*.set*(..)) && args(java.lang.String)") public void check(final JoinPoint jp) { LOGGER.debug(jp.getSignature().toLongString()); Object[] args

我正在开发一个方面来检查setter方法的参数并用null值覆盖空字符串。这是我目前的状态:

@Before("execution(* de.foo.entity.*.set*(..)) && args(java.lang.String)")
public void check(final JoinPoint jp) {
    LOGGER.debug(jp.getSignature().toLongString());
    Object[] args = jp.getArgs();
    for (int i = 0; i < args.length; i++) {
        if (args[i] instanceof String && ((String) args[i]).isEmpty()) {
            args[i] = null;
        }
    }
}
@Before(“execution(*de.foo.entity.*.set*(..))&&args(java.lang.String)”
公共无效检查(最终接合点jp){
debug(jp.getSignature().toLongString());
对象[]args=jp.getArgs();
对于(int i=0;i
不幸的是,overwrite语句
args[i]=null现在可以工作了!有人知道我应该如何覆盖它吗

干杯


凯文

我认为你必须实施一个周而复始的建议,而不是事前的建议

因为您可以在新参数中使用“继续”:

proceed(newArgs);

谢谢你,为什么我要提出一个全面的建议而不是以前?除了使用around通知我能够控制方法的执行、捕获异常和检查返回值之外,还有什么区别呢?a before通知获取参数数组的副本,但它不能修改原始参数。这就是周围的建议的作用。拉尔夫:+1@Kevin顺便说一句,你可以用这个
if(“.”equals(args[i])替换这个
if(args[i]instanceof String&((String)args[i]).isEmpty())
,谢谢,速度快吗?可能是因为铸造?我不认为有太多的性能方面的差异,但我的版本更可读,因此不容易出错