自定义注解笔记

自定义注解及AOP切面的应用笔记

注解解释

@Target

用于描述注解的使用范围,有一个枚举ElementType来指定,具体如下:
CONSTRUCTOR:用于描述构造器
FIELD:用于描述域
LOCAL_VARIABLE:用于描述局部变量
METHOD:用于描述方法
PACKAGE:用于描述包
PARAMETER:用于描述参数
TYPE:用于描述类、接口(包括注解类型) 或enum声明

@Retention

表示需要在什么级别保存该注释信息,用于描述注解的生命周期,也是一个枚举RetentionPoicy来决定的,一般都是填的RetentionPoicy.RUNTIME,填这个值注解处理器才能通过反射拿到注解信息,实现自己的语义

注解类

@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Test1 {

    String key() default "" ;
}

注解应用

@Test1(key="6666666666666")
@RequestMapping("t")
public String test(@RequestParam Map map){
    return "dddd";
}

切面解析应用

@Aspect    //表明这个类是切面类 
@Component //这个类交由Spring管理
public class TestAspect {
    
    public TestAspect(){
        System.out.println("-*--------------------------");
    }
    
    @Pointcut("@annotation(p.u.sys.annotation.Test1)")
    public void logPointCut() { 
        System.out.println("-*--------------------------");
    }
    
    @Around("logPointCut()")
    public Object object(ProceedingJoinPoint point) throws Throwable {
        
           //获取拦截的方法名
        Signature sig = point.getSignature();
        MethodSignature msig = null;
        if (!(sig instanceof MethodSignature)) {
            throw new IllegalArgumentException("该注解只能用于方法");
        }
        msig = (MethodSignature) sig;
        Object target = point.getTarget();
        Method currentMethod = target.getClass().getMethod(msig.getName(), msig.getParameterTypes());
        String methodName = currentMethod.getName();
        
        String className = point.getTarget().getClass().getName();
        //获取拦截方法的参数
        Object[] params = point.getArgs();

        //获取操作名称
        Test1 annotation = currentMethod.getAnnotation(Test1.class);
        //注解值
        String key = annotation.key();
 
        
        return "";
    }

}

发表留言

人生在世,错别字在所难免,无需纠正。

icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif