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 注解的更多相关文章

  1. Java Annotation 注解

    java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...

  2. paip.Java Annotation注解的作用and 使用

    paip.Java Annotation注解的作用and 使用 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog. ...

  3. 自己写的基于java Annotation(注解)的数据校验框架

    JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方 ...

  4. java Annotation 注解的使用

    源码地址:https://github.com/yylxy/JavaAnnotationTest.git java Annotation 注解的使用 ,代码中有详细的注释.是用AndroidStudi ...

  5. JAVA - Annotation 注解 入门

    Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...

  6. Java Annotation注解继承说明

    有关Annotation的继承说明: 1.JDK文档中的说明是:只有在类上应用的Annotation才能被继承,而实际应用时的结果是:除了类上应用的Annotation能被继承外,没有被重写的方法的A ...

  7. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Anno ...

  8. Java Android 注解(Annotation) 及几个常用开源项目注解原理简析

    不少开源库(ButterKnife.Retrofit.ActiveAndroid等等)都用到了注解的方式来简化代码提高开发效率. 本文简单介绍下 Annotation 示例.概念及作用.分类.自定义. ...

  9. 深入理解Java:注解(Annotation)基本概念

    转自:http://www.cnblogs.com/peida/archive/2013/04/23/3036035.html 竹子-博客(.NET/Java/Linux/架构/管理/敏捷) 什么是注 ...

  10. Java Annotation 及几个常用开源项目注解原理简析

    PDF 版: Java Annotation.pdf, PPT 版:Java Annotation.pptx, Keynote 版:Java Annotation.key 一.Annotation 示 ...

随机推荐

  1. C#.NET WinForm 多个子Task嵌套 Task.WaitAll 阻塞UI线程

    C#.NET WinForm 多个子Task(子线程)嵌套  Task.WaitAll 阻塞UI线程 (界面) 情况: DoIt()方法内,开了2个Task 执行任务,子任务中会更新UI. DoIt( ...

  2. vits-simple-api搭建

    根据vits-simple-api中文文档指南自行搭建后端 以下步骤均在windows平台cpu推理搭建为例 选择你的vits模型(注意是vits!不是So-Vits Bert Vits2 Gpt V ...

  3. k8s配置文件管理

    1.为什么要用configMap ConfigMap是一种用于存储应用所需配置信息的资源类型,用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件. 通过ConfigMap可以方便的 ...

  4. python pika rabbitmq demo

    import pika import json # https://www.cnblogs.com/zhaohuaxishi/p/12107392.html # https://www.cnblogs ...

  5. 【已结束】阿珏Blog三周年特别纪念活动

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` [已结束]阿珏Blog三周年特别纪念活动 日期:2019- ...

  6. 无法启动 IIS Express Web 服务器.....另一个程序正在使用此文件,进程无法访问。 问题解决

    一般是由于端口被占用导致的,但是这个端口你在命令行netstat -a里 排除 如果发现被占用,那么就kill进程就可以了 如果没有发现被占用,依然无法启动,可以尝试以下方法 解决方案1: 修改iis ...

  7. 聊一聊 Monitor.Wait 和 Pluse 的底层玩法

    一:背景 1. 讲故事 在dump分析的过程中经常会看到很多线程卡在Monitor.Wait方法上,曾经也有不少人问我为什么用 !syncblk 看不到 Monitor.Wait 上的锁信息,刚好昨天 ...

  8. Asp.net core Swashbuckle Swagger 的常用配置

    背景 .net core Swashbuckle Swagger 官方文档:https://github.com/domaindrivendev/Swashbuckle.AspNetCore 我们发现 ...

  9. .NET Core MVC基础之页面传值方式📃

    .NET Core MVC基础之页面传值方式 前言 最近工作太忙了,浅浅更新一下.NET基础知识.大部分面试官都会问.NET页面传值的几种方式,那么接下来就来细讲与实现一下吧! 页面传值分成两类 第一 ...

  10. hive第二课:Hive3.1.2概述与基本操作(修改版)

    Hive3.1.2概述与基本操作 1.Hive基本概念 1.1 Hive简介 Hive本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据存储,说白了hive可以理解为一个将 ...