Her biri yöntem bağımsız değişkenlerini değiştiren iki yönü var. Her iki özellik de aynı yönteme uygulandığında, zincirlenecek yönlerin uygulanmasını beklerdim ve ilk bakışta değiştirilen argümanların joinPoint.getArgs();
aracılığıyla ikinci görünüme ulaşmasını beklerdim, ancak her yönün sadece orijinal argümanlar; ikinci yön, değiştirilmiş değerleri asla görmez. Bir örnek yapmacık ettik:Parametreleri bir bakışta birden fazla yönde değiştirme Önerileri sağlama
:
public class AspectTest extends TestCase {
@Moo
private void foo(String boo, String foo) {
System.out.println(boo + foo);
}
public void testAspect() {
foo("You should", " never see this");
}
}
yöntem foo() iki yönü ile tavsiye edilir:
@Aspect
public class MooImpl {
@Pointcut("execution(@Moo * *(..))")
public void methodPointcut() {}
@Around("methodPointcut()")
public Object afterMethodInControllerClass(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("MooImpl is being called");
Object[] args = joinPoint.getArgs();
args[0] = "don't";
return joinPoint.proceed(args);
}
}
ve ...
@Aspect
public class DoubleMooImpl {
@Pointcut("execution(@Moo * *(..))")
public void methodPointcut() {}
@Around("methodPointcut()")
public Object afterMethodInControllerClass(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("DoubleMooImpl is being called");
Object[] args = joinPoint.getArgs();
args[1] = " run and hide";
return joinPoint.proceed(args);
}
}
Çıkışın şu şekilde olmasını beklerim:
... ama geçerli:MooImpl is being called
DoubleMooImpl is being called
You should run and hide
mıyım tavsiye etrafında yoluyla argümanlar değiştirmek için doğru bir yaklaşım kullanarak?
Lütfen AspectJ kullanıcılarının e-posta listesine üye olup burada sorunuz. Orada yetkili bir cevap almalısın. Ben de sonuçla ilgilenirim. – kriegaex