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 ...
随机推荐
- Myeclipse 启动tomcat项目报Out of memory: java heap space
问题: 在Myeclipse中启动tomcat,程序启动过程中报内存不足,java.lang.OutOfMemoryError: Java heap space 从错误可以看出是堆内存太小,需要配置j ...
- 数据包从物理网卡流经 Open vSwitch 进入 OpenStack 云主机的流程
目录 文章目录 目录 前言 数据包从物理网卡进入虚拟机的流程 物理网卡处理 如何将网卡收到的数据写入到内核内存? 中断下半部分软中断处理 数据包在内核态 OvS Bridge(Datapath)中的处 ...
- C# 加解密工具类
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Clov ...
- Python3 Selenium自动化web测试 ==> 第六节 WebDriver高级应用 -- 操作web页面的滚动条
学习目的: 掌握页面元素定位以外的其他重要知识点. 正式步骤: 测试Python3代码 # -*- coding:utf-8 -*- from selenium import webdriver fr ...
- 图文详解 : 什么是版本控制?Eclipse配置SVN和IDEA配置GIT教程
前言 虽然在工作中, VCS已然配置妥当, 我们敲好的业务只需要Commit&push提交就好, 但是不妨碍我们了解什么是版本控制, 为什么要使用这类工具? ps.最近项目里的小伙伴想在自己家 ...
- [机器学习理论] 降维算法PCA、SVD(部分内容,有待更新)
几个概念 正交矩阵 在矩阵论中,正交矩阵(orthogonal matrix)是一个方块矩阵,其元素为实数,而且行向量与列向量皆为正交的单位向量,使得该矩阵的转置矩阵为其逆矩阵: 其中,为单位矩阵. ...
- 【Abode Air程序开发】Flex air文件打包和运行
1 安装Adobe AIR 运行时,和java的JVM类似. Adobe AIR 运行时允许在桌面运行AIR应用程序,脱离游览器的束缚. 下载安装文件http://get.adobe.com/cn/a ...
- postman 请求接口 Could not get any response
前提: 今天用postman请求接口的时候,能请求到接口,但是打断点后发现方法里面要抛出异常就出现错误: 错误原因: 返回的 http 的 code不是3位的,如下我写成了四位 4002: <? ...
- createjs小游戏开发总结
createjs缩放,html组件input的缩放,transform位置,缩放,字体的大小. 移动端横屏和竖屏幕旋转屏幕自适应,input弹出软键盘的原理和位置偏移,focus,blur弹出软键盘. ...
- openresty+lua+kafka方案与Tomcat接口并发度对比分析
1.openresty+lua+kafka 1.1 openresty+lua+kafka方案 之前的项目基于nginx反向代理后转发到Tomcat的API接口进行业务处理,然后将json数据打入ka ...