java 世界中Annotation

在github上开始汇总一些自己学习,收集,总结,经验的一些信息,有利于跟踪,修改,提升。如果你感兴趣 可以关注一下,也可以提供自己的内容进来。

https://github.com/dchack/java_read_learn/blob/master/java/base/annotation.md

描述数据的数据
xml也是做这件事,引入Annotation是因为xml数量增加,可以分散在不同位置,维护对开发编程了负担。但是,事实上引入xml这种描述数据的工具就是为了分离代码和配置。
所以,如何权衡使用Annotation和xml,也成为了开发需要思考的问题。
1,如果是描述常量,配置参数的情况下,使用xml是较好的选择
2,如果配置会被做一些功能类的事情的,需要和特定的代码结合使用的,使用Annotation。 大多数优秀的框架都是结合两者配合使用的,发挥两者的优势。

分类

1 标准 Annotation
Override, Deprecated, SuppressWarnings
标准 Annotation 是指 Java 自带的几个 Annotation,上面三个分别表示重写函数,函数已经被禁止使用,忽略某项 Warning

2 元 Annotation
@Retention, @Target, @Inherited, @Documented,元 Annotation 是指用来定义 Annotation 的 Annotation,在后面 Annotation 自定义部分会详细介绍含义

3 自定义 Annotation
自定义 Annotation 表示自己根据需要定义的 Annotation,定义时需要用到上面的元 Annotation

详细

既然元 Annotation 是描述Annotation的 那么标准还是自定义Annotation都是被它描述的。在源码里我们可以看Override是怎么被描述的:

  1. @Target(ElementType.METHOD)
  2. @Retention(RetentionPolicy.SOURCE)
  3. public @interface Override {
  4. }

从代码我们看到@Target(ElementType.METHOD)表示这个Annotation用语注解方法的。 @Retention(RetentionPolicy.SOURCE) 则表示解析Annotation的时间点是编译的时候 被描述的注解在什么范围内有效。

RetentionPolicy.RUNTIME 在.java .class文件时存在,加载到内存后还存在了 使用反射机制获取注解内容:

  1. method.getAnnotation(AnnotationName.class);
  2. method.getAnnotations();
  3. method.isAnnotationPresent(AnnotationName.class);

RetentionPolicy.CLASS 在.java .class文件时存在,加载到内存后就不存在了 jdk提供里一个apt机制(https://docs.oracle.com/javase/6/docs/technotes/guides/apt/GettingStarted.html#AnnotationProcessor)

RetentionPolicy.SOURCE 在.java时存在 .class文件时就不存在了 所以这个是给java编译器使用的

总结一下:
注解作为数据的描述者,可以在java代码从源码到运行的各个阶段被解析出内容,然后依据内容做想做的事。

java 世界中Annotation的更多相关文章

  1. 使用Eclipse开发,Java Compiler中Annotation Processin不出现的解决方案

    第一步:在Eclipse菜单栏中点击Help,在点击inatall New Software 第二步:在Work with中找到 Juno - http://download.eclipse.org/ ...

  2. 探索java世界中的日志奥秘

                    java日志简单介绍 对于一个应用程序来说日志记录是必不可少的一部分.线上问题追踪,基于日志的业务逻辑统计分析等都离不日志.JAVA领域存在多种日志框架,目前常用的日志 ...

  3. 原来Java世界里也有这么多精彩的故事,学Java真有趣!

    大千世界,无所不有.这世上不光有人类世界,还有咱们的java世界.今天就由我这个实习导游带领你们了解了解咱们的java世界奇妙之处.   有一种暖男叫catch,有一种真爱叫try---catch,世 ...

  4. JUnit 4 使用 Java 5 中的注解(annotation)

    JUnit 4 使用 Java 5 中的注解(annotation),以下是JUnit 4 常用的几个 annotation 介绍@Before:初始化方法@After:释放资源@Test:测试方法, ...

  5. Java 开发 2.0: 现实世界中的 Redis

    原文地址:http://www.ibm.com/developerworks/cn/java/j-javadev2-22/ 之前,我已在本系列中讨论过 NoSQL 的概念,也介绍了一些与 Java 平 ...

  6. Java语言中的面向对象特性总结

    Java语言中的面向对象特性 (总结得不错) [课前思考]  1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类?  2. 面向对象编程的特性有哪三个?它们各自又有哪些特性?  3. 你知 ...

  7. 编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议16~20)

    建议16:易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP,Ruby,Groovy.Javascript等,这些入侵者都有一个共同特征:全是同一类语言-----脚本语言,它 ...

  8. java 项目中几种O实体类的概念

    经常会接触到vo,do,dto的概念,本文从领域建模中的实体划分和项目中的实际应用情况两个角度,对这几个概念进行简析. 得出的主要结论是:在项目应用中,vo对应于页面上需要显示的数据(表单),do对应 ...

  9. 主流的单元测试工具之-JAVA新特性-Annotation 写作者:组长 梁伟龙

    1:什么是Annotation?Annotation,即“@xxx”(如@Before,@After,@Test(timeout=xxx),@ignore),这个单词一般是翻译成元数据,是JAVA的一 ...

随机推荐

  1. Gym 100952A&&2015 HIAST Collegiate Programming Contest A. Who is the winner?【字符串,暴力】

    A. Who is the winner? time limit per test:1 second memory limit per test:64 megabytes input:standard ...

  2. UnityShader 表面着色器简单例程集合

    0.前言 这些简单的shader程序都是写于2015年的暑假.当时实验室空调坏了,30多个人在实验室中挥汗如雨,闷热中学习shader的日子还历历在目.这些文章闲置在我个人博客中,一年将过,师弟也到了 ...

  3. 【android studio】 gradle配置成本地离线zip包

    http://blog.csdn.net/jingleye/article/details/52689260       关键词:distributionUrl修改成本地路径,android stud ...

  4. as提示功能

  5. [国嵌笔记][004][Linux快速体验]

    Linux文件系统 bin目录:可执行的程序 boot目录:与Linux启动相关的文件 dev目录:设备以文件的方式存放 etc目录:配置文件 home目录:用户文件 lib目录:与库相关的文件 ro ...

  6. Spider_Man_5.2 の Mongodb_使用

    一:简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库1.易用性 MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库.不采用关系型主要是为了获得 ...

  7. 工作小结(关于webpack)

    今天在工作中遇到了一个新问题,是关于webpack的. 是这样的,我在项目中添加了一个新页面,修改完配置文件后,开始运行,刚开始并没有什么问题,很顺利,后来我又添加了一个页面,然后修改配置文件,然后运 ...

  8. Angular(2+) 国际化方案(ngx-translate)

    本文只针对ngx-translate/core 6.x版本,如果你使用的是5.x或者更低的版本,请参照以下链接. https://github.com/ngx-translate/core/blob/ ...

  9. 修改织梦默认栏目页、文章页URL命名规则,简化目录结构

    版权声明:本文为博主原创文章,未经博主允许不得转载. 用织梦Dedecms建站,建议优化系统默认的URL结构,这样能简化网站目录深度,利于搜索引擎收录. 现在织梦的默认文章命名规则是 {typedir ...

  10. IOS中UIScrollView的contentSize、contentOffset和contentInset属性

    IOS中,UIScrollView是可以滚动的视图,其中最常用的UITableView就是继承了UIScrollView. 跟所有的view一样,UIScrollView有一个frame属 性,同时, ...