Guice: метод перехвата с параметрами и полями - PullRequest
0 голосов
/ 28 января 2019

Я смотрю на перехват вызовов методов с Guice.Из здесь я видел, что возможны базовые перехваты.Однако логика, перехватывающая методы, требует доступа не только к параметрам, передаваемым в функцию, но также (к сожалению) к свойству члена класса.Возможно ли достичь этого с помощью Guice AOP?Если так, что нужно сделать?Я думаю о чем-то, что может выглядеть так:

class Foo {
    @customInterceptor Object member; // Intercepting logic needs this

    // function to be intercepted, param needed for the logic as well
    @customInterceptor
    void myFunc(@customInterceptor String param) {
        // body, do something with member and param
    }
}

1 Ответ

0 голосов
/ 30 января 2019

Это возможно с помощью отражения.Не уверен, что это хорошая практика, и я предполагаю, что вы знаете, что делаете!

public Object invoke(MethodInvocation methodInvocation) throws Throwable {
    Object o = methodInvocation.getThis();
    Field f = methodInvocation.getMethod().getDeclaringClass().getDeclaredField("member");
    //if member is private
    f.setAccessible(true);
    System.out.println("inside interception :: " + f.get(o));
    f.setAccessible(false);
    return methodInvocation.proceed();
}
...