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对象的方法.

猜你喜欢

转载自www.cnblogs.com/trekxu/p/9098238.html
011