annotation的概念

In the Java computer programming language, an annotation is a form of syntactic metadata that can be added to Java source code. Classes, methods, variables, parameters and packages may be annotated.

是Java提供的一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotation(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据

java中的注解是一种继承自接口java.lang.annotation.Annotation的特殊接口

自定义annotation

用关键字@interface可以自定义一个注解,目前这个注解没有任何功能,仅仅只是声明了,(自定义注解需要加上元注解,下面会写到)

public @interface CustomizeAnnotation {

}

定义好之后就可以在类、方法、变量上面使用了(自定义注解在加上了元注解后,其使用位置就被限制,下面的例子只是说明注解可以存在且不限于以下位置)

@CustomizeAnnotation
public class Check { @CustomizeAnnotation
public void checkOut(@CustomizeAnnotation String username) { } }

注解也可以有属性,写法和接口中方法一样

public @interface CustomizeAnnotation {

    String name() default "Tom";

    int age();

}

如果注解有属性,在使用注解时需要给没有默认值的属性赋值(例如name有默认值Tom,不用赋值,age没有默认值,需要赋值)

public class Check {

    @CustomizeAnnotation(age = 10)
public void checkOut(String username) { } }

这样自定义注解不完整,因为自定义注解需要加上元注解

meta-annotation元注解

Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明

  • @Target   定义注解的作用目标
  • @Retention   定义注解的保留策略,retention是保留的意思
  • @Documented   表示该注解将被包含在javadoc中
  • @Inherited   表示子类可以继承父类中的该注解

查看一下@Target注解源码,可以看到这个注解(自己注解了自己)有一个属性value,类型是枚举数组

然后看看这个枚举定义哪些作用目标,每个值的作用注释解释的很详细

查看一下@Retention注解的源码

然后看看这个RetentionPolicy这个枚举有哪些值,只有三个值

annotation应用

自定义一个注解(如下:需要加上@Target和@Retention,另外两个注解@Documented和@Inherited不是必须要加的)

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomizeAnnotation {
int count() default 300;
}

获取注解中的属性

@CustomizeAnnotation
public class Main { public static void main(String[] args) {
CustomizeAnnotation annotation = Main.class.getAnnotation(CustomizeAnnotation.class);
System.out.println(annotation.count());
}
}

注解在spring框架中使用很广泛,用以替代xml配置文件,后续在补充在spring中的应用

Java学习笔记:注解Annotation的更多相关文章

  1. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  2. Java学习之注解Annotation实现原理

    前言: 最近学习了EventBus.BufferKinfe.GreenDao.Retrofit 等优秀开源框架,它们新版本无一另外的都使用到了注解的方式,我们使用在使用的时候也尝到不少好处,基于这种想 ...

  3. Java学习笔记--注解和反射

    注解和反射 1. 注解 注解作用: 对程序做出解释 被其他程序读取 注解格式: @注释名,还可以添加一些参数值,例如@SuppressWarnings(value="unchecked&qu ...

  4. Java学习笔记--注解

    注解的使用与实例:http://www.cnblogs.com/pepcod/archive/2013/02/16/2913474.html 注解的作用及使用方法:http://wenku.baidu ...

  5. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  6. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  7. Java学习:注解,反射,动态编译

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Java学习:注解,反射,动态编译 Annotation 注解  什么是注解 ? Annotat ...

  8. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  9. 20155234 2016-2017-2第十周《Java学习笔记》学习总结

    20155234第十周<Java学习笔记>学习总结 教材学习内容总结 网络编程 在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定 ...

  10. 20155234 2610-2017-2第九周《Java学习笔记》学习总结

    20155234第九周<Java学习笔记>学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC(Ja ...

随机推荐

  1. 【Scheme】符号求导

    思路: 定义一个求导算法, 令其在抽象对象上执行求导操作. 可以由以下规约规则完成: dc/dx=0 dx/dx=1 d(u+v)/dx=du/dx+dv/dx d(uv)/dx=u(dv/dx)+v ...

  2. js两个数组对象通过相同元素匹配筛选

    let a = [ { name: 'joy', year: '24' }, { name: 'eve', year: '25' } ] let b = [ { name: 'joy', city: ...

  3. no module named cv2

    运行python脚本时报错: ImportError: No module named cv2 第一想法: 使用命令: pip install cv2 会报错找不到请求的版本 解决方法: 使用命令 p ...

  4. VM 端口映射问题

    环境: 宿主机:WIN 10 --192.168.9.87 虚拟机:CentOS ---192.168.255.129 联通模式:NAT模式 一.VM做端口映射 1.为了方便管理,设置虚拟机为静态IP ...

  5. Django 之多对多关系

    1. 多对多关系 作者 <--> 书籍 1. 表结构设计 1. SQL版 -- 创建作者表 create table author( id int primary key auto_inc ...

  6. POJ3259 :Wormholes(SPFA判负环)

    POJ3259 :Wormholes 时间限制:2000MS 内存限制:65536KByte 64位IO格式:%I64d & %I64u 描述 While exploring his many ...

  7. Reportviewer中的函数使用——打印当前日期并格式化

    如2017-10-23 12:20:20 通过DateTime.Now.ToString("yyMMddHHmmss")变为 20171023122020字符串

  8. 【mysql】字段支持JSON类型

    mysql从5.7开始已经支持JSON类型的字段. 支持的操作:添加,修改,置空,子key添加,子key重置,子key删除,通过子key查找等. 但是这里和普通字段的修改和查找不同,涉及到一些JSON ...

  9. PAT L2-016 愿天下有情人都是失散多年的兄妹(深搜)

    呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母.高祖父母)则不可通婚.本题就请你帮助一对有情人判断一下,他们究竟是否可以成婚? 输入格式: 输入 ...

  10. echarts中间有字饼图Demo1

    echarts链接:http://gallery.echartsjs.com/editor.html?c=xHy2vIPzLQ 代码: option = { backgroundColor: 'bla ...