Guice conforms to AOP alliance, and so we could directly write interceptors by implementing MethodInterceptor interface (org.aopalliance.intercept
). APIs could then be annotated with custom annotations, and these annotations could be used to join method invocation with the interceptors. For joining method interception with the interceptor, we need to use the bindInterceptor(…)
API from the AbstractModule. Let's see all of this in action.
Consider we need to design a mechanism (a fictitious one), which could be used to log invocation to a method and arguments passed to it. This could be used across the methods. This makes it a good cross-cutting concern. Let's implement this concern as an implementation of MethodInterceptor.
public class LoggingInterceptor implements MethodInterceptor{ @Override public Object invoke(MethodInvocation invocation) throws Throwable { System.out.println("Invoking"+invocation.getMethod().getName()); Object...