Java中的自定义注解
## 元注解
要声明一个注解, 我们需要元注解, 元注解是指注解的注解,包括@Retention
, @Target
, @Document
, @Inherited
.
@Retention
注解的保留位置(枚举RetentionPolicy),RetentionPolicy可选值:
SOURCE
注解仅存在于源码中,在class字节码文件中不包含, 如果只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings,则可选用 SOURCE 注解。CLASS
默认的保留策略,注解在class字节码文件中存在,但运行时无法获得, 如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解RUNTIME
注解在class字节码文件中存在,在运行时可以通过反射获取到, 如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解
@Inherited
说明子类可以继承父类中的该注解
@Documented
声明注解能够被javadoc等识别
@Target
用来声明注解范围(枚举ElementType),ElementType可选值:
TYPE
接口、类、枚举、注解FIELD
字段、枚举的常量METHOD
方法PARAMETER
方法参数CONSTRUCTOR
构造函数LOCAL_VARIABLE
局部变量ANNOTATION_TYPE
注解PACKAGE
包
## Demo
1.声明注解类型
@Target(value = ElementType.METHOD) //声明该注解的运行目标: 方法
@Retention(value = RetentionPolicy.RUNTIME) //该注解的生命周期: 运行时
public @interface CanRun { // 通过@interface表示注解类型String str() default "wow"; // 注解中携带的元数据
}
2.使用自定义注解
public class AnnotationRunner {public void method1() {System.out.println("method 1");}@CanRun(str = "foobar") // 方法2添加了自定义注解的标签同时传入str值public void method2() {System.out.println("method 2");}public void method3() {System.out.println("method 3");}}
3.测试自定义注解
public class AnnotationTest {public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {AnnotationRunner runner = new AnnotationRunner();Method[] methods = runner.getClass().getMethods();for (Method method : methods){CanRun annos = method.getAnnotation(CanRun.class);//System.out.println("1");if (annos != null){method.invoke(runner);System.out.println(annos.str());}}}
}
运行结果:
method 2
foobar
转载于:https://www.cnblogs.com/fortitude/p/10932623.html
Java中的自定义注解相关推荐
- java 中的 Annotation 注解学习笔记
java 中的 Annotation 注解 什么是注解 元注解 @Target @Retention @Document @Inherited 自定义注解 什么是注解 Annotation 是从JDK ...
- Java中的@Test注解
Java中的@Test注解 @Test注解,方便我们对一段代码进行测试. 需要导入相应的包: import org.junit.Test; 在方法前加上 @Test , 则该方法即为测试方法,可以执行 ...
- java scheduled_怎么在java中利用@Scheduled注解执行定时任务
怎么在java中利用@Scheduled注解执行定时任务 发布时间:2021-01-13 16:52:56 来源:亿速云 阅读:84 作者:Leah 本篇文章给大家分享的是有关怎么在java中利用@S ...
- java 继承 注解_在java中实现组合注解原理分析(注解继承)
今天在自定义注解的时候,原计划实现一个类似于Spring中的注解@Component的功能,如果稍有留意一下,会发现,在Spring中我们常见的注解,其实都继承了@Component注解:如下图所示: ...
- java中spring的注解_spring中的各种注解解析
Spring中的注解大概可以分为两大类: 1)spring的bean容器相关的注解,或者说bean工厂相关的注解: 2)springmvc相关的注解. spring的bean容器相关的注解,先后有:@ ...
- 在SpringBoot项目中,自定义注解+拦截器优雅的实现敏感数据的加解密!
在实际生产项目中,经常需要对如身份证信息.手机号.真实姓名等的敏感数据进行加密数据库存储,但在业务代码中对敏感信息进行手动加解密则十分不优雅,甚至会存在错加密.漏加密.业务人员需要知道实际的加密规则等 ...
- java 注解原理_在java中实现组合注解原理分析(注解继承)
今天在自定义注解的时候,原计划实现一个类似于Spring中的注解@Component的功能,如果稍有留意一下,会发现,在Spring中我们常见的注解,其实都继承了@Component注解:如下图所示: ...
- Spring切面中实现自定义注解
1.首先写出一个自定义注解. package com.salong.aspect.test;import java.lang.annotation.*;@Target(ElementType.METH ...
- java 切片_JAVA自定义注解并切片应用
Java支持注解形式,合理使用注解,可以对我们的编程提供极大的便利.JAVA自身提供了三种注解,分别是:@Override,@Deprecated,@SuppreWarnings.大家平时应该看见这个 ...
- SpringBoot中利用自定义注解优雅地实现隐私数据脱敏(加密显示)
前言 这两天在整改等保测出的问题,里面有一个"用户信息泄露"的风险项(就是后台系统里用户的一些隐私数据直接明文显示了),其实指的就是要做数据脱敏. 数据脱敏:把系统里的一些敏感数据 ...
最新文章
- 还在使用Future轮询获取结果吗?CompletionService快来了解下。
- Mac 上 iterm2 和 VSCode 终端中的字体设置建议
- php正则匹配js中变量_PHP正则表达式核心技术 第4节 php查找匹配函数使用心得
- 查找字符位置_学习VB编程第69天 字符串查找与替换
- 数据结构的简单理解(4)
- python定时器库_Python定时器完整示例 python定时器用法举例
- Linux内核线程kernel thread详解--Linux进程的管理与调度
- ubutun 更换网络源_Ubuntu 更换源
- 【Liunx服务器】阿里云服务器下部署多个tomcat服务
- WebService的两种用户验证方式
- MySQL(三) —— 约束以及修改数据表
- nodejs中全栈开发框架meteor的文档
- extend 和 append 的区别
- AC日记——单词倒排 1.7 28
- 社区智能健康手环方案/APP/小程序/项目
- 2020年测试面试经历以及面试题大全
- 大家怎么看阿里云的“云渲染”服务?
- 读书笔记--认知突围
- soul被下架,社交圈的一股清流也变了味?
- Excel中使用名称定义常数