Aspectj覆盖方法的参数

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

@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; } } } 

不幸的是,覆盖语句args[i] = null; 现在有效! 有谁知道我该怎么覆盖它?

干杯,

凯文

我相信你必须实施一个周围的建议,而不是之前的建议。

因为您可以继续使用新参数:

 proceed(newArgs); 

@Ralph你是绝对正确的,不同的是,通过周围的建议,我能够将args传递给执行者! 这现在工作正常!

 @Around("execution(* de.foo.entity.*.set*(..)) && args(java.lang.String)") public void checkAroundSetter(final ProceedingJoinPoint pjp) throws Throwable { LOGGER.debug(pjp.getSignature().toLongString()); Object[] args = pjp.getArgs(); for (int i = 0; i < args.length; i++) { if (args[i] instanceof String && ((String) args[i]).isEmpty()) { args[i] = null; } } pjp.proceed(args); } 

嘿,人们对性能有何看法?