自定义注解结合aop开发

1.自定义注解的三个注释

  1. @Documented  注解规范,就当是注解的标注
  2. @Retention  注解的注解,用来阐述该注解的生效周期,一般是runtime,运行时生效
  3. @Target 这个是让该注解对什么地方生效,类上还是方法上,方法上居多
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AnnotationLog{

    String value() default "";
    // 该value是注解的属性,可以换成zhangsan都是可以的
    String zhangsan() default "";
 
}

 AOP

面向切面编程,对代码做增强完善的

@Aspect
@Component
public class AopLog {

    @Pointcut(value = "@annotation(com.jason.annotation.DefinetionLog)")
    public void test(){

    }

    @AfterReturning(value = "test()",returning = "res")
    public void test1(JoinPoint point,Object res){
        MethodSignature signature = (MethodSignature) point.getSignature();
        DefinetionLog annotation = signature.getMethod().getAnnotation(DefinetionLog.class);
        annotation.value();
        annotation.zhangsan();
        System.out.println(res);


    }

也可以把切点表达式和切通知方法结合一下,更整洁

@AfterReturning(pointcut = "@annotation(com.jason.annotation.DefinetionLog)",returning = "result")
    public void show(JoinPoint joinPoint, Object result){
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        DefinetionLog annotation = signature.getMethod().getAnnotation(DefinetionLog.class);
        System.out.println(annotation.value());
        System.out.println(annotation.zhangsan());
        System.out.println(result);

    }

 然后就可以在controller包里建一个AnnoController类

@RestController
@RequestMapping("/test")
public class AnnoController {

    @RequestMapping("/all")
    @DefinetionLog(value = "12",zhangsan = "牛逼")
    public String test(){
        return "去你妈的";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值