Java注解【四、自定义注解】
语法要求、元注解
元注解:
Target-适用范围;
Retention-类型:源码注解、编译时注解、运行时注解
Inherited-可继承(只能继承类上的注解,接口、类中的方法都不行)
Documented-可生成文档关键字-@interface
成员要求:
成员类型须为基8类型,及String,Class,Annotation,Enumeration
若注解只有一个成员,则该成员名称须为value()
注解类也可以没有成员,即为标识注解
Demo:
public class DefAnnoDemo {
//上面4行为元注解
//Target可选,CONSTRUCTOR,FIELD,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER,TYPE
@Target({ElementType.METHOD,ElementType.TYPE})//注解试用范围,方法、类
//Retention可选,SOURCE,CLASS,RUNTIME
@Retention(RetentionPolicy.RUNTIME)//属性,源码、编译时、运行时
@Inherited //可以被继承
@Documented //生成文档时会包含注解
//注解关键字-@interface
public @interface AnnoDemo{
//成员类型须为基8类型,及String,Class,Annotation,Enumeration
String Anno(); //成员须为无参无异常
int age() default 1; //可以用default定义默认
//若注解只有一个成员,则该成员名称须为value()
//int Value();
//注解类也可以没有成员,即为标识注解
}
}
自定义注解的使用
@<注解名>(<成员名1>=<成员值1>,...)
Demo:
@AnnoDemo(Anno = "abcd", age = 18)
class Test {
@AnnoDemo(Anno = "abc")
public void test1(String[] p) {
}
}
解析注解
概念:通过反射获取类、函数的运行时注解信息,从而实现动态控制程序运行的逻辑
Demo:
public class AnnoUseDemo {
public static void main(String[] args) {
// 类加载
Test t = new Test(); //将这里改为TestSon,查看@Inherited继承效果
Class<? extends Test> c = t.getClass();
// 判断该类是否包含AnnoDemo注解
if (c.isAnnotationPresent(AnnoDemo.class)) {
// 获得注解
AnnoDemo a = (AnnoDemo) c.getAnnotation(AnnoDemo.class);
System.out.println(a.age());
}
// 获取方法上的注解
try {
Method m = c.getMethod("test1", String[].class);
if (m.isAnnotationPresent(AnnoDemo.class)) {
AnnoDemo a = (AnnoDemo) m.getAnnotation(AnnoDemo.class);
System.out.println(a.Anno());
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
// 获取所有方法注解
Method[] ms = c.getMethods();
for (Method method : ms) {
if (method.isAnnotationPresent(AnnoDemo.class)) {
AnnoDemo a = method.getAnnotation(AnnoDemo.class);
System.out.println(a.Anno() + a.age());
}
}
}
}
class TestSon extends Test{
@Override
public void test1(String[] p){
}
}
Java注解【四、自定义注解】的更多相关文章
- Java注解-元数据、注解分类、内置注解和自定义注解|乐字节
大家好,我是乐字节的小乐,上次说过了Java多态的6大特性|乐字节,接下来我们来看看Java编程里的注解. Java注解有以下几个知识点: 元数据 注解的分类 内置注解 自定义注解 注解处理器 Ser ...
- Java中的注解及自定义注解你用的怎么样,能不能像我这样应用自如?
Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...
- Springboot--元注解及自定义注解(表单验证)
本文简单说明一下元注解,然后对元注解中的@Retention做深入的讨论,在文章最后使用元注解写一个自定义注解来结尾. 一.结论: @Target:注解的作用目标 @Target(ElementTyp ...
- java注解和自定义注解的简单使用
前言 在使用Spring Boot的时候,大量使用注解的语法去替代XML配置文件,十分好用. 然而,在使用注解的时候只知道使用,却不知道原理.直到需要用到自定义注解的时候,才发现对注解原理一无所知,所 ...
- Java反射与自定义注解
反射,在Java常用框架中屡见不鲜.它存在于java.lang.reflact包中,就我的认识,它可以拿到类的字段和方法,及构造方法,还可以生成对象实例等.对深入的机制我暂时还不了解,本篇文章着重在使 ...
- java内置注解、元注解和自定义注解
注解的作用: 1.生成文档 2.跟踪代码依赖性 3.编译时进行格式检查 ---------------------------------------------------------------- ...
- Java:深入自定义注解(Annotation)
在网上找了很多资料也有写的比较好的,但是总有有一点半点的细节没有写出来,在这里自己总结下使用. 使用Java的自定义注解,首先个人需要了解下Java为我们提供的元注解和相关定义注解的语法.(这个我在网 ...
- Java注解(自定义注解、view注入)
注解这东西虽然在jdk1.5就加进来了,但他的存在还是因为使用Afinal框架的view注入才知道的.一直觉得注入特神奇,加了一句就可以把对应view生成了. 下面我们来认识一下注解这个东西 一.注解 ...
- Java中的自定义注解
## 元注解 要声明一个注解, 我们需要元注解, 元注解是指注解的注解,包括@Retention, @Target, @Document, @Inherited. @Retention 注解的保留位置 ...
- Spring注解之-自定义注解
1.自定义注解,先自定义三个水果属性的注解 元注解: java.lang.annotation提供了四种元注解,专门注解其他的注解(在自定义注解的时候,需要使用到元注解): @Documented ...
随机推荐
- flutter AnimatedPositioned
Positioned 的动画版. 只有是 Stack 的 child 时才能工作. 如果 child 的 size 在动画过程会改变,则 AnimatedPositioned 是很好的选择 doubl ...
- 九十七:CMS系统之模板抽离和个人信息页面
模板抽取,将公共的页面抽出来作为模板 {% from 'common/_macros.html' import static %}<!DOCTYPE html><html lang= ...
- Jmeter性能测试工具的使用(Web性能测试)
Jmeter性能测试工具的使用(Web性能测试) 1.下载 http://pan.baidu.com/s/1o7p18Ye 该软件不用安装,直接解压打开即可使用. 2.使用 这里就在win下进行,图形 ...
- [CDH] Acquire data: Flume and Kafka
Flume 基本概念 一.是什么 Ref: http://flume.apache.org/ 数据源获取:Flume.Google Refine.Needlebase.ScraperWiki.Bloo ...
- idea设置背景色和字体大小
修改背景色 点击[File],选择[Settings]. 点击[Editor],选择[color Scheme]. 默认Scheme只有两种.Default是白色,Darcula是黑色 修改字体 ...
- 随机森林之oob的计算过程
随机森林有一个重要的优点就是,没有必要对它进行交叉验证或者用一个独立的测试集来获得误差的一个无偏估计.它可以在内部进行评估,也就是说在生成的过程中就可以对误差建立一个无偏估计. 随机森林在生成每颗决策 ...
- DP————LIS(最长上升子序列)和LCS(最长公共子序列)问题
LIS问题 https://www.acwing.com/problem/content/898/ 思路:首先数组a中存输入的数(原本的数),开辟一个数组f用来存结果,最终数组f的长度就是最终的答案: ...
- IT架构的本质
老僧三十年前未参禅时,见山是山,见水是水. 及至后来,亲见知识,有个入出,见山不是山,见水不是水. 而今得个休歇处,依前见山只是山,见水只是水. 参禅的三重境界在IT技术圈同样适用,初学者感叹每个产品 ...
- Socket与系统调用深层分析
实验背景: Socket API编程接口之上可以编写基于不同网络协议的应用程序: Socket接口在用户态通过系统调用机制进入内核: 内核中将系统调用作为一个特殊的中断来处理,以socket相关系统调 ...
- [bzoj4026]dC Loves Number Theory_主席树_质因数分解_欧拉函数
dC Loves Number Theory 题目大意:dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给定一个长度为 n的正整数序列A,有q次询问 ...