自定义注释

自定义注释

package main.Controller;

import java.lang.annotation.*;

//@Documented 注解
//    功能:指明修饰的注解,可以被例如javadoc此类的工具文档化,只负责标记,没有成员取值。
@Documented
//@Retention 注解
//功能:指明修饰的注解的生存周期,即会保留到哪个阶段。
//RetentionPolicy的取值包含以下三种:
//SOURCE:源码级别保留,编译后即丢弃。
//CLASS:编译级别保留,编译后的class文件中存在,在jvm运行时丢弃,这是默认值。
//RUNTIME: 运行级别保留,编译后的class文件中存在,在jvm运行时保留,可以被反射调用。
@Retention(RetentionPolicy.RUNTIME)
//@Target 注解
//        功能:指明了修饰的这个注解的使用范围,即被描述的注解可以用在哪里。
//        ElementType的取值包含以下几种:
//
//        TYPE:类,接口或者枚举
//        FIELD:域,包含枚举常量
//        METHOD:方法
//        PARAMETER:参数
//        CONSTRUCTOR:构造方法
//        LOCAL_VARIABLE:局部变量
//        ANNOTATION_TYPE:注解类型
//        PACKAGE:包
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    String value() default "500";
}

package main.Controller;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;

/**
 * @ClassName TestAspect
 * @Description TODO
 * @Date 2019/2/25/02515:12
 * @Version 1.0
 **/
//配置切面
@Aspect
@Component
public class TestAspect {

    //这个是环绕通知,这个方法是将你所注释的方法放在其内部运行,因此你所著是的方法的返回值将会丢失,百年城返回@around的返回值。
//    @annotation(main.Controller.MyAnnotation)指向你的注释类
    @Around("@annotation(main.Controller.MyAnnotation)")
    public void Interceptor(ProceedingJoinPoint joinPoint){
    // try {
    //       return  joinPoint.proceed();
    //    }catch (Throwable e){
        try {
            //执行方法 @GetMapping("/add1")
            //    public String addData1(String deviceId) {
            //        System.out.println("=====addData1=====");
            //        return "success";
            //    }
//            和@before方法
            joinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        System.out.println("around");
    }
    @Before("@annotation(main.Controller.MyAnnotation)")
    public void before(JoinPoint joinPoint){
        MethodSignature sign =  (MethodSignature)joinPoint.getSignature();
        Method method = sign.getMethod();
        //获取到注释的内容
        MyAnnotation annotation = method.getAnnotation(MyAnnotation.class);
        System.out.println("打印:" + annotation.value() + " 开始前");
//        //System.out.println("===开始前===");
        System.out.println("before");
    }

    @After("@annotation(main.Controller.MyAnnotation)")
    public void after() {
        System.out.println("after");
    }
}



package main.Controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ClassName TestController
 * @Description TODO
 * @Date 2019/2/25/02515:07
 * @Version 1.0
 **/
@RestController
@RequestMapping("/add2")
public class TestController {

    @MyAnnotation("200")
    @GetMapping("/add1")
    public String addData1() {
        System.out.println("=====addData1=====");
        return "success";
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值