博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb学习-注解-2-注解作用目标限定和保留策略
阅读量:4301 次
发布时间:2019-05-27

本文共 1280 字,大约阅读时间需要 4 分钟。

前面一篇学习注解快速入门,知道了注解作用目标,有在类,在方法,在局部变量等。这篇来学习注解的作用目标只限定在类或者方法上,然后学习注解的保留策略。

 

注解作用目标限定

让一个注解,它的作用目标只能在类上不能在方法上,这个就叫注解的作用目标限定。怎么给注解添加限定了,在定义注解的时候,使用@Target注解可以达到作用目标限定的目的。

 

看看有哪些类型,我们在IDE中搜索找到ElementType.class这个枚举代码,看看有在Target注解中可以使用哪些目标范围来限定。

TYPE

作用范围有,类,接口,包括注释类型还有枚举。

FIELD

这个单词叫字段的意思,作用范围有成员变量,就是类变量。

METHOD

作用范围限定在方法上

PARAMETER

单词是参数的意思,就是在一个方法传参的地方使用。

CONSTRUCTOR

单词是构造器的意思,作用范围限定在构造器

LOCAL_VARIABLE

作用在局部变量。

ANNOTATION_TYPE

作用在注解类型

PACKAGE

作用范围在包上

还有两个在JDK 1.8中定义的,参数类型和使用类型。

作用目标限定代码练习

练习1:只能作用类上,不能作用方法,ElementType值选择TYPE

限定了在类上,如果方法上使用了注解就报错。

 

练习2:只能作用方法上, ElementType值选择METHOD

 

 

练习3:同时方法和类都能用

这个不使用Target注解,默认全部都是可以作用在这些支持的地方,这里我们要求只能方法和类,其他不行。

在类和方法上可以使用注解,但是在成员变量上不行。

 

保留策略

先来解释下什么是保留策略,保留就是只注解的保留。下面有三种保留策略。

  • 源代码文件
  • 编译后的字节码文件
  • JVM中

源代码文件注解(SOURCE):注解只保留在源代码文件,当编译时,会被忽略,在字节码中是不会存在的。所以,反编译别人的源码,是不会存在注解的。

字节码文件注解(CLASS):这种注解,在源代码中存在,然后编译时会把注解信息放在class文件中,但JVM在加载类的时候会忽略注解。

JVM中注解(RUNTIME):在源码文件中存在,在JVM加载的时候会把注解加载到JVM内存,这个是唯一可反射注解。

 

限定注解的保留策略

我们开发中使用的注解都是采用第三者注册策略,也就是JVM中注解。接下来我们来看看如何限定注解保留策略。

RetentionPolicy是一个枚举类型,里面有三个类型,分别对应上面介绍过的源码注解,字节码注解和JVM中注解。

例如,我们使用RUNTIME类型,因为我们想使用反射。

package annotation;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;@MyAnnotationpublic class Demo1 {	}@Retention(RetentionPolicy.RUNTIME)@interface MyAnnotation{	}

 

转载地址:http://rmxws.baihongyu.com/

你可能感兴趣的文章
解决ubuntu下修改my.cnf设置字符集导致mysql无法启动
查看>>
根据进程的PID查询对应端口号
查看>>
Ubuntu安装指定版本的docker
查看>>
MySQL show processlist过滤
查看>>
python的单例理解、__new__、新式类object以及python2和python3下__new__的区别。
查看>>
OpenStack Mitaka keystone 分页(pagination)实现
查看>>
OpenStack删除Cinder盘失败解决办法
查看>>
Linux cpu 详解
查看>>
GitHub + Hexo 搭建个人博客
查看>>
Linux Ubuntu 修改网卡名字
查看>>
OpenStack Ocata Horizon 开发(一)—— 快速开始
查看>>
自定义Horizon
查看>>
Django 源码阅读:服务启动(wsgi)
查看>>
Django 源码阅读:url解析
查看>>
第三轮面试题
查看>>
Docker面试题(一)
查看>>
第四轮面试题
查看>>
第一轮面试题
查看>>
2020-11-18
查看>>
Docker面试题(二)
查看>>