• 011 使用AOP操作注解


    一 . 概述

      本节是一个示例i程序的演示,说明之前讲解的这些知识.


    二 .演示

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface MyAnnotation {
        
        String name() default "";
        
    }

    首先我们定义了一个注解,这个注解有一个参数name.

    定义我们的切面类: 

    @Aspect
    @Component
    public class MyAspect {
        //此处表示的意思是,des的注解信息被注入到des变量上面去.
        @Around(value="@annotation(des)")
        public void around(ProceedingJoinPoint point,MyAnnotation des) throws Throwable {
            //现在我们的方法可以切入到含有指定注解的方法之中.
            System.out.println("被拦截的类为-->"+point.getSourceLocation().getWithinType().getName());
            //获取方法的名称
            String mathodName = point.getSignature().getName();
            System.out.println("方法的名字是:-->" + mathodName);
            //获取方法的参数
            System.out.println("方法的参数为-->"+Arrays.toString(point.getArgs()));
            //获取注解的内容
            String name = des.name();
            System.out.println("目标对象上的注解的name属性的值为-->" + name);//执行目标方法
            point.proceed();
        }
    }

    目标对象: 

    @Component
    public class Proxy {
        
        @MyAnnotation(name="abc")
        public void proxy(String  name) {
            System.out.println("proxy...");
        }
    }

    配置类:  

    @Configuration
    @EnableAspectJAutoProxy(proxyTargetClass=true)
    @ComponentScan("com.trek.demo")
    public class Config {
    }

    需要注意的就是,我们一定要开启AOP注解驱动.

    测试代码:  

    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
            Proxy proxy = (Proxy) context.getBean("proxy");
            proxy.proxy("trek");

    三 .总结

      [1] 我们通过注解的方式可以完成注解属性的获取,以后这个例子就可以作为一个模板

      [2]其实point.getSourceLocation()就是获取类的信息

      [3]其实point.getSignature()就是获取代理method对象的方法.

  • 相关阅读:
    冲突域和广播域的区分
    internet 的一词多义
    大神洗礼第四讲——函数相关及编程技巧
    旋转字符串算法由浅入深
    一个交换程序的通用版本
    想起一些事情,都很遥远
    [转载]创业感想
    [转载]javascript小技巧
    [转载]在Asp.Net 2.0中应用DataFormatString
    [转载]C#的String.Format格式化举例
  • 原文地址:https://www.cnblogs.com/trekxu/p/9098238.html
Copyright © 2020-2023  润新知