【Java】Annotation 注解
Annotation 注解
注解是一种元数据 MetaData,从JDK5开始
在Java代码中是一个特殊的标记,可以在编译,类加载,运行时读取,执行对应的处理
程序可以在不改变原有逻辑的基础上嵌入一些补充信息,代码分析工具,开发工具,部署工具通过补充信息
进行验证和部署
注解可以使用在任何写代码的地方:
- 包
- 类
- 构造器
- 方法
- 成员变量
- 参数
- 局部变量的声明
信息被保存在 KV对中
在我们学过的J2SE中,注解的使用目的很简单,只是为了标记功能
- 标记过时方法和字段 @Deprecated
- 标记编译器警告忽略 @SuppressWarnings
- 标记方法是重写父类的方法 @Override
EE/Andriod 的用途更为强大,用来配置程序的切面,配置注入参数信息
在以后的发展中,注解将会越来越重要,现阶段的框架就是
注解 + 反射 + 设计模式
摆脱繁琐的XML配置
文档注解 Document Annotation
@author 声明开发者名字,多个开发者使用逗号分隔 - @author 张三,李四,王五
@version 开发版本 -@version 1.0
@see 相关资料地址
@since 从哪个版本开始有的
@param 对参数的说明
@return 对返回值的说明
@exception 对可能抛出的异常的说明
编译检查注解 CompileCheck Annotation
- JDK内置的三个基本注解
@Override 标记为重写的父类方法,仅标记方法
@Deprecated 比较为已过时的方法,但是不妨碍调用,可标记在类和方法上
@SuppressWarnings 抑制编译器警告,对波浪警告提示烦了?试试这个玩意儿
自定义注解实现
public @interface MyAnnotation { // 声明类一样声明注解 @interface
// 注解的成员属性 定义在午餐方法中声明 属性只能声明默认的 protected public 这三种
// 方法名即是属性的标识名,方法的返回类型就是属性的数据类型
// 类型可以声明为 8个基本类型、类类型、枚举类型、注解类型?、和前面数据类型的数组
// 可以声明default 为遍历指定初始值
// 只有一个,且是最重要的参数 可使用value表示、 在注解的时候可以不用写 value = ? 直接写值即可
// 定义的注解有配置参数,则必须指定参数值,也就是要赋值 除非存在默认初始值
// 自定义注解必须配上注解的信息处理流程才有意义?
String name();
}
// 使用注解
@MyAnnotation(name = "hello")
class AC{
}
声明default 默认可不需要赋值,适用于默认配置,我不想配置也可以用
- 注解声明为@interface
- 内部定义成员,不是方法!!! 通常使用value表示
- 可以default声明默认值
- 自定义注解如果没有成员,那么只是一个标记注解
JDK元注解 Meta - Annotation
- 用于注解注解的注解【给注解上注解!】
4个标准元注解
@Retention
@Target
@Documented
@Inherited
元数据?对现有数据的一个修饰 String name = "阿伟"
最重要的是阿伟这个值,元数据只是对他的修饰,
name是值的标识,String是值的类型,这些被称为元数据
所以也就是说,元注解是对注解的修饰规范
@Retention 注解的生命周期
该注解包含一个RetentionPolicy保留策略的枚举类
用于标注注解的保留策略
枚举项:
- RetentionPolicy.SOURCE 保留在源码中,编译和运行丢弃
- RetentionPolicy.CLASS 保留在字节码中,JVM运行丢弃 ,这是默认的保留策略
- RetentionPolicy.RUNTIME 运行保留,程序可以反射获取注解信息
@Target 可注解的位置
该注解包含一个元素类型的枚举类数组
用于标注注解的可标注位置
枚举项:
- TYPE
- FIELD
- METHOD
- PARAMETER
- CONSTRUCTOR
- LOCAL_VARIABLE
- ANNOTATION_TYPE
- PACKAGE
- TYPE_PARAMETER JDK8特性 可注解类类型
- TYPE_USE JDK8特性 注解使用类类型
@Documented 可生成文档的
被注解的注解类可以被JavaDoc识别,并提取生成文档
@Inherited 可继承的
给自定义的注解类注解,自定义注解具有可继承性,
当一个父类注解了自定义注解,其子类继承了父类也会拥有该注解
JDK8
可重复注解?
类型注解?
重复注解意思是我们希望在一个地方可以使用多次一样的注解

但是很明显这不允许!
JDK8之前采用注解数组的办法实现兼容

在注解时使用此注解

JDK8增加了一个新的注解,用于这种情形
@Repeatable 可重复的

要注意的是两者的注解的@Retention生命周期、@Target可标注的位置必须一致,还有@Inherited
【Java】Annotation 注解的更多相关文章
- Java Annotation 注解
java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...
- paip.Java Annotation注解的作用and 使用
paip.Java Annotation注解的作用and 使用 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog. ...
- 自己写的基于java Annotation(注解)的数据校验框架
JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方 ...
- java Annotation 注解的使用
源码地址:https://github.com/yylxy/JavaAnnotationTest.git java Annotation 注解的使用 ,代码中有详细的注释.是用AndroidStudi ...
- JAVA - Annotation 注解 入门
Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...
- Java Annotation注解继承说明
有关Annotation的继承说明: 1.JDK文档中的说明是:只有在类上应用的Annotation才能被继承,而实际应用时的结果是:除了类上应用的Annotation能被继承外,没有被重写的方法的A ...
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- Java Android 注解(Annotation) 及几个常用开源项目注解原理简析
不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...
- 深入理解Java:注解(Annotation)基本概念
转自:http://www.cnblogs.com/peida/archive/2013/04/23/3036035.html 竹子-博客(.NET/Java/Linux/架构/管理/敏捷) 什么是注 ...
- Java Annotation 及几个常用开源项目注解原理简析
PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示 ...
随机推荐
- 算法学习笔记(30):Kruskal 重构树
Kruskal 重构树 这是一种用于处理与最大/最小边权相关的一个数据结构. 其与 kruskal 做最小生成树的过程是类似的,我们考虑其过程: 按边权排序,利用并查集维护连通性,进行合并. 如果我们 ...
- 配置系统未能初始化。“System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常。
配置系统未能初始化."System.Transactions.Diagnostics.DiagnosticTrace"的类型初始值设定项引发异常. 1.是检查当前程序的 App.c ...
- C#.NET Winform承载WCF RESTful API (App.config 方式)
1.新建一个名为"WindowsForms承载WCF"的WINFORM程序. 2.在解决方案里添加一个"WCF 服务库"的项目,名为"WcfYeah& ...
- 使用 OpenTelemetry 构建可观测性 02 - 埋点
这是讲解 OpenTelemetry 系列博客的第二篇.在上一篇博客中,我们介绍了 OpenTelemetry 是什么以及由什么组成.现在我们将讨论如何使用 OTel 准确收集遥测数据和链路追踪数据. ...
- JS 中 == 和 === 区别是什么?
a.对于string,number等基础类型,==和===有区别:不同类型间比较,==之比较"转化成同一类型后的值"看"值"是否相等,===如 果类型不 ...
- mysql删除主键索引,删除索引语法
mysql删除主键索引,删除索引语法 ### Incorrect table definition; there can be only one auto column and it must be ...
- Spring Boot入门实验
一. 实验目的和要求 1.掌握使用 IDEA 通过 Maven 和 Spring Initializr 的方式创建 Spring Boot 应用程序: 2.掌握 Maven 的工作原理: 3.了解 s ...
- MySQL常见的后端面试题,你会几道?
为什么分库分表 单表数据量过大,会出现慢查询,所以需要水平分表 可以把低频.高频的字段分开为多个表,低频的表作为附加表,且逻辑更加清晰,性能更优 随着系统的业务模块的增多,放到单库会增加其复杂度,逻辑 ...
- python 动态导入模块并结合反射,动态获取类、方法(反射太好用),动态执行方法
背景: 关键字驱动框架,不同的关键字方法分别定义在不同的类,真正执行关键字方法又在不同的类(简称A),这样就需要在执行前,要在文件A下import要使用的模块,如果有很多页面操作或很多模块时,就需要每 ...
- 一文学完所有的Hive Sql(两万字最全详解)
Hive Sql 大全 本文基本涵盖了Hive日常使用的所有SQL,因为SQL太多,所以将SQL进行了如下分类: 一.DDL语句(数据定义语句): 对数据库的操作:包含创建.修改数据库 对数据表的操作 ...