2013-07-10 2 views
0

Я хочу перехватить (@AroundInvoke) вызов метода ... получить исходные параметры метода (передать по ссылке) с помощью ctx.getParameters() и заменить их другими .. но Я хочу, чтобы исходные параметры также были изменены (!), А не просто вызывали метод с новыми параметрами.Перехватить метод и изменить исходные параметры

+0

Я не понимаю ... если параметры передаются по ссылке, когда вы их меняете, а затем вызываете context.proceed() измененные также попадают в ваш аннотированный компонент @Interceptor ... Можете ли вы уточнить – Korgen

ответ

0

Я бы, возможно, попробовать подклассов класса, который имеет метод вызывается, а затем изменить параметры перед вызовом super.AroundInvoke (...), как

public class AroundInvokerOverrider extends ClassWithAroundInvokeMethod 
{ 
    @override 
    public void AroundInvoke(int a, char c, ...) 
    { 
     a += 1; 
     c = 'A'; 

     super.AroundInvoke(a,c); 
    } 
} 
+0

Это не изменяет исходные аргументы (которые в вашем случае передаются по значению, что означает, что их копия передается .. что неправильно). Просто вызывает метод с измененными аргументами. То, что я хочу, это то, что перехват заканчивается, исходные аргументы меняются! –

+0

Я не думаю, что вы можете это сделать (без хакоса и обхода в любом случае). B/c java не поддерживает «пройти по ссылке» http://stackoverflow.com/questions/40480/is-java-pass-by -Справка – samosaris

Смежные вопросы