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

Java1.5引入了注解,当前许多java框架中大量使用注解,如Hibernate、Jersey、Spring。注解作为程序的元数据嵌入到程序当中。注解可以被一些解析工具或者是编译工具进行解析。我们也可以声明注解在编译过程或执行时产生作用。

在使用注解之前,程序源数据只是通过java注释和javadoc,但是注解提供的功能要远远超过这些。注解不仅包含了元数据,它还可以作用于程序运行过程中、注解解释器可以通过注解决定程序的执行顺序。例如,在Jersey webservice 我们为方法添加URI字符串的形式的**PATH**注解,那么在程序运行过程中jerser解释程序将决定该方法去调用所给的URI。

创建Java自定义注解

创建自定义注解和创建一个接口相似,但是注解的interface关键字需要以@符号开头。我们可以为注解声明方法。我们先来看看注解的例子,然后我们将讨论他的一些特性。

  • 注解方法不能带有参数;
  • 注解方法返回值类型限定为:基本类型、String、Enums、Annotation或者是这些类型的数组;
  • 注解方法可以有默认值;
  • 注解本身能够包含元注解,元注解被用来注解其它注解。

这里有四种类型的元注解:

1. @Documented —— 指明拥有这个注解的元素可以被javadoc此类的工具文档化。这种类型应该用于注解那些影响客户使用带注释的元素声明的类型。如果一种声明使用Documented进行注解,这种类型的注解被作为被标注的程序成员的公共API。

2. @Target——指明该类型的注解可以注解的程序元素的范围。该元注解的取值可以为TYPE,METHOD,CONSTRUCTOR,FIELD等。如果Target元注解没有出现,那么定义的注解可以应用于程序的任何元素。

3. @Inherited——指明该注解类型被自动继承。如果用户在当前类中查询这个元注解类型并且当前类的声明中不包含这个元注解类型,那么也将自动查询当前类的父类是否存在Inherited元注解,这个动作将被重复执行知道这个标注类型被找到,或者是查询到顶层的父类。

4.@Retention——指明了该Annotation被保留的时间长短。RetentionPolicy取值为SOURCE,CLASS,RUNTIME。

Java内建注解

Java提供了三种内建注解。

1. @Override——当我们想要复写父类中的方法时,我们需要使用该注解去告知编译器我们想要复写这个方法。这样一来当父类中的方法移除或者发生更改时编译器将提示错误信息。

2. @Deprecated——当我们希望编译器知道某一方法不建议使用时,我们应该使用这个注解。Java在javadoc 中推荐使用该注解,我们应该提供为什么该方法不推荐使用以及替代的方法。

3. @SuppressWarnings——这个仅仅是告诉编译器忽略特定的警告信息,例如在泛型中使用原生数据类型。它的保留策略是SOURCE(译者注:在源文件中有效)并且被编译器丢弃。

我们来看一个java内建注解的例子参照上边提到的自定义注解。

相信这个例子可以不言自明并能展示在不同场景下的应用。

Java注解解析

我们将使用反射技术来解析java类的注解。那么注解的RetentionPolicy应该设置为RUNTIME否则java类的注解信息在执行过程中将不可用那么我们也不能从中得到任何和注解有关的数据。

运行上面程序将输出:

这就是该教程的全部内容,希望你可以从中学到些东西。

java注解 自定义策略传参_Java注解教程及自定义注解相关推荐

  1. java 调用kettle job 传参_java调用kettle向job(任务)和transformation(转换)传递参数实例...

    虽然网上文章有说java可以传递参数给kettle,不过只找到了传递参数给转换的文章,没有讲参数传递给job,kettle中如何使用java传递的参数.今天就以上问题,一并共享. /** * 本测试类 ...

  2. java中位运算传参_java基础之位运算讲解于实战

    一.基础知识点概括 在查看源码中,经常会看到很多这样的符号"&"."|"."-","^","<& ...

  3. java调用python,传参json字符串,含中文传参

    java调用python,传参json字符串 python脚本内容(test.py) # -*- coding: utf-8 -*-def main(input):return input java调 ...

  4. js调用java_Js调用Java方法并互相传参的简单实例

    Js通过PhoneGap调用Java方法并互相传参的. 一.JAVA代码 写一个类,该类继承自Plugin并重写execute方法. public class PluginTest extends P ...

  5. js调java并传参_Js调用Java方法并互相传参的简单实例

    Js通过PhoneGap调用Java方法并互相传参的. 一.JAVA代码 写一个类,该类继承自Plugin并重写execute方法. import org.json.JSONArray; import ...

  6. java中注解动态传参_Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)...

    Java自定义注解源码+原理解释(使用Java自定义注解校验bean传入参数合法性)java 前言:因为前段时间忙于写接口,在接口中须要作不少的参数校验,本着简洁.高效的原则,便写了这个小工具供本身使 ...

  7. java中Long类型传参校验注解_JAVA——实现json bean实体类的传参校验模板及注解详解...

    关注wx:CodingTechWork,一起学习进步. 引言 在java开发中,经常需要和外界系统进行参数对接,api设计中难免会遇到json传参不一致的情况,虽然纸面或者接口规范约束了应该怎么传参, ...

  8. SpringMVC 使用注解时控制器传参

    自动注入 默认方法的参数名和网页的属性名相同,会自动注入(自动转换类型) Tips:若方法的参数名和网页的属性名并不相同,可使用注解 @RequestParam(value="网页的属性名& ...

  9. ajax deletemapping,springmvc使用put,delete方法传参问题,以及使用@PutMapping注解和@DeleteMapping注解...

    首先我们要知道@PutMapping,@DeleteMapping的作用: @PutMapping:"对应修改操作,表明是一个修改URL映射". @DeleteMapping:&q ...

最新文章

  1. 2022-2028年中国半导体用环氧塑封料(EMC)行业市场全景调查及投资前景分析报告
  2. Ubuntu 10.10 安装 libx11-dev
  3. ubuntu16.4中创建帐户
  4. DataGrid内容的导出
  5. 【javascript】数据结构-链表
  6. 1-1-Active Directory 基础结构要求
  7. docker 挂载目录_Docker容器数据管理
  8. python编辑邮件格式_python发送邮件模板
  9. 流内容html,为什么,和元素属于html中的流内容?
  10. Chrome 实现前端页面自动刷新
  11. UBUNTU完美运行TM,RTX,MSOffice,迅雷
  12. 3dmax如何删除多余的时间帧
  13. 如何选择适合你的兴趣爱好(七十一),养鸟
  14. 温州话的歌曲也很好听
  15. 2021年兴义五中高考成绩查询,贵州省黔西南州兴义市第五中学2021年招生计划
  16. 棒棒的二维数据可视化分类模型
  17. qq宠物html代码,QQ企鹅即将消失,那个被我们所遗忘的宠物,终于要给大家说再见了...
  18. 重学 PyTorch 第四天:Module 和 Optimizer
  19. 谈谈Wi-Fi的安全模式
  20. 云原生应用的12要素

热门文章

  1. 【免费毕设】ASP.NET某中学图书馆系统的设计与实现(源代码+论文)
  2. 国考计算机专业生报名人数,近四成岗位随便挑!2020年国考,这类专业招录人数接近一万...
  3. baidumap vue 判断范围_vue中百度地图API的调用
  4. typecho 全站ajax,typecho全站静态化方案
  5. 穿越障碍物JAVA编程_JAVA 基础编程练习题1 【程序 1 不死神兔】
  6. matlab 小波启发式阈值滤波,小波阈值去噪
  7. 标准燃料计算机准,油表显示的油耗真的准确吗?教你最准确的油耗计算方法
  8. 程序显示文本框_vb程序语言题库
  9. C++面试题-面向对象-多态性与虚函数
  10. NSURLErrorDomain 对照