美文网首页
[Guice] 7 Guice Aop

[Guice] 7 Guice Aop

作者: LZhan | 来源:发表于2019-08-13 23:16 被阅读0次

    Guice中的Aop,通常是结合自定义注解实现。

    以实现一个日志打印的切面注解为例:
    1、自定义注解

    @Retention(RetentionPolicy.RUNTIME)
    public @interface Logged {
    }
    

    2、在module中实现绑定


    image.png

    第一个参数:作用在哪些class上
    第二个参数:哪些class会执行(标有对应注解的才执行)
    第三个参数:MethodIntercaptor接口实现类

    bindInterceptor(Matchers.any(),
                    Matchers.annotatedWith(Logged.class),
                    new MethodInterceptor() {
                        @Override
                        public Object invoke(MethodInvocation methodInvocation) throws Throwable {
                            Method method = methodInvocation.getMethod();
                            System.out.println("Hello World");
                            return methodInvocation.proceed();
                        }
                    });
    

    3、当在第三个参数MethodIntercaptor接口实现类中想要某个注入的成员变量

    public class LoggerInterceptor implements MethodInterceptor {
    
        @Inject @Output private  String message;
    
        @Override
        public Object invoke(MethodInvocation methodInvocation) throws Throwable {
            Method method = methodInvocation.getMethod();
            System.out.println(message);
            return methodInvocation.proceed();
        }
    }
    
    

    使用到了一个@Output的注入变量,那么在绑定时,要加上requestInjection(loggerInterceptor);

    LoggerInterceptor loggerInterceptor=new LoggerInterceptor();
    requestInjection(loggerInterceptor);
            
    bindInterceptor(Matchers.any(),
                  Matchers.annotatedWith(Logged.class),
                  loggerInterceptor
                    );
    

    注意:
    guice的Aop必须使用在通过guice创建的对象上,比如我们手工创建一个对象,添加日志AOP,这时,guice也是没有办法去拦截的,必须通过guice从头开始inject开始的才可以进行AOP处理

    相关文章

      网友评论

          本文标题:[Guice] 7 Guice Aop

          本文链接:https://www.haomeiwen.com/subject/gebijctx.html