美文网首页
注解详解

注解详解

作者: 守住阳光 | 来源:发表于2018-09-12 19:35 被阅读0次

一、什么是注解?

        注解是源代码的元数据,是代码的标签。其本质如下:

        1、它是一个附属品,依赖于其他元素存在;

        2、本身没有任何作用,在恰当的时候由外部程序解析产生预定作用。

二、注解的作用

        1、简化配置;

        2、增加代码的可读性;

        3、提升系统的可维护性。

        spring中定义了很多自定义注解,spring的注解分为两类,一是初始化类注解,二是aop类注解。

三、注解的分类

        按定义分类:

        1、内置注解,由jdk自身提供,如:@Override,@Deprecated,@SuppressWarning等。

        2、自定义注解。

        按声明周期分类:

        1、SOURCE:表示编译时这个注解会被移除,不会包含在编译后产生的class文件中。

        2、CLASS:表示这个注解会包含在class文件中,但是在运行时会被移除。

        3、RUNNING:表示这个注解会保留到运行时,在运行时可以被jvm访问到,我们可以在运行时通过反射解析这个注解。

四、注解的属性

        1、Retention

        定义注解的生命周期,可选值为:SOURCE,CLASS,RUNNING。

        2、Documented

        文档化注解,会被javadoc工具文档化。

        3、Inherited

        注解是自动继承的,想让一个类和它的子类都包含某个注解,就可以使用它来修饰这个注解。

        4、Target

        说明了被修饰的注解的应用范围,包括:

        TYPE:表示可以用来修饰类、接口、注解类型或枚举类型。

        PACKAGE:表示可以用来修饰包。

        PARAMETER:表示可以用来修饰参数。

        ANNOTATION_TYPE:表示可以用来修饰注解类型。

        METHOD:表示可以用来修饰方法。

        FIELD:表示可以用来修饰属性(包括枚举常量)。

        CONSTRUCTOR:表示可以用来修饰构造器。

        LOCAL_VARIABLE:表示可以用来修饰局部变量。

五、如何定义一个注解

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.TYPE,ElementType.METHOD})

public @interface CacheResult {

    String key();

    String cacheName();

    boolean needLock() default false;

}

六、如何使用注解

        通过jdk反射获取注解信息:

Class clazz = OrderDetaiServiceImpl.class;

Class annoClazz = CacheResult .class;

if(clazz .isAnnotationPresent(annoClazz )){

        Annotion annotion = (CacheResult )clazz .getAnnotation(annoClazz );

        System.out.println(annotion .key());

        System.out.println(annotion .cacheName());

}

七、注解使用场景

        注解通常与aop结合使用,步骤:

        编写自定义注解,将注解增加到主拦截方法上,编写切面。

        准备工作包括:引入aspect包,在配置文件中增加:<aop:aspect-autoproxy proxy-target-class="true"/>让aop注解生效。

相关文章

网友评论

      本文标题:注解详解

      本文链接:https://www.haomeiwen.com/subject/ynsbgftx.html