Java的annotation功能

JDK1.5开始增加了Annotation功能,该功能可用于类、构造方法、成员变量、方法、参数等的声明中。该功能不影响程序运行,但是会对编译器警告等辅助工具产生影响。

一、定义一个Annotation

public @interface UserName{}

使用@interface关键字定义一个注解

二、添加成员

public @interface UserName{
    String value();
}

成员类型支持:String\class\primitive\enumerated\annotation,以及所列类型的数组;

三、添加默认值

public @interface UserName{
    String value() default "default value";
}

四、指定可注解的类型

@Target(ElementType.Method)
public @interface UserName{}

适用于注解在方法上,例如:

Class Car{
    @UserName(value = "laye")
    public void drive(){}
}

ElementType的种类有:

  1. ANNOTATION_TYPE:表示用于Annotation类型;
  2. TYPE:表示用于类、接口、以及Annotation和枚举类型;
  3. CONSTRUCTOR:表示用于构造方法;
  4. FIELD:表示用于成员变量和枚举常量;
  5. METHOD:表示用于方法;
  6. PARAMETER:表示用于参数;
  7. LOCAL_VARIABLE:表示用于局部变量;
  8. PACKAGE:表示用于包;

五、指定注解的有效范围

@Retention(RetentionPolicy.RUNTIME)
public @interface UserName{}

表示在运行时有效,RetentionPolicy可选类型如下:

  1. SOURCE:表示不编译到类文件中;
  2. CLASS:表示编译到类文件,但运行时不加载;
  3. 表示在运行时加载;

六、访问注解

java.lang.reflect包下有一个类:AccesibleObject,它时Method\Field\Constructor的父类,同时它又实现了AnnotatedElement接口。因此,Method\Field\Constructor包含了访问注解的接口方法;

具体例子如下:

@Target(ElementType.FIELD) // 注解类型为变量
@Retention(RetentionPolicy.RUNTIME) // 有效范围为运行时
public @inteface UserName{ // 声明注解
    String value() default "no body";  // 添加成员
}

class Car{
    @UserName(value = "lay") // 注解在变量上
    public String owner; // 默认值

    public static void main(String[] args) throws Exception{
        Class c = Car.class; // 获取类类型
        Field field = c.getField("owner"); // 获取对应变量
        UserName userName = (UserName)field.getAnnotation(UserName.class); // 获取注解
        System.out.println(userName.value()); // 获取注解的成员变量
        Car car = new Car(); // 获取实例
        field.set(car, userName.value()); // 设置实例的owner变量的值
    }
}

以上是一个访问field的示例,method和constructor等类同这样的写法;

常用方法:

  1. isAnnotationPresent(Class class):是否添加了指定类型的注解;
  2. getAnnotation(Class class): 获取指定类型的注解;
  3. getAnnotations(): 获取所有类型的注解;
  4. getParameterAnnotations(): 获取所有参数的注解;
时间: 2024-11-06 03:28:12

Java的annotation功能的相关文章

java注解(Annotation)解析

注解(Annotation)在java中应用非常广泛.它既能帮助我们在编码中减少错误,(比如最常见的Override注解),还可以帮助我们减少各种xml文件的配置,比如定义AOP切面用@AspectJ模式代替Schema模式,特别是最近接触了一点Spring MVC,每次编写Controller的时候用@RequestMapping(),@RequestParam,@ResponseBody等等. 我们所用的java中自带的注解都是定义好了的,直接拿来用,它就能发挥作用.当然了,自己也可以定义注

java 注解Annotation

什么是注解? 注解,顾名思义,注解,就是对某一事物进行添加注释说明,会存放一些信息,这些信息可能对以后某个时段来说是很有用处的. java注解又叫java标注,java提供了一套机制,使得我们可以对方法.类.参数.包.域以及变量等添加标准(即附上某些信息).且在以后某个时段通过反射将标注的信息提取出来以供使用. 通过使用Annotation,程序开发人员可以在不改变的原有逻辑的情况下,在源文件嵌入一些补充的信息. Annotation可以用来修饰类.属性.方法,而且Annotation不影响程序

JAVA注解Annotation

JAVA注解Annotation JAVA注解Annotation 什么是注解 为什么要引入注解 JDK内建Annotation JDK元Annotation Annotation示例 自定义注解 提取Annotation信息 Annotation处理器编写 Annotation处理器处理异常 什么是注解? ??用一个词就可以描述注解,那就是元数据,即一种描述数据的数据.所以,可以说注解就是源代码的元数据.比如,下面这段代码: @Override publicString toString()

Java Basic - Annotation

使用注解最主要的部分在于对注解的处理,那么就会涉及到注解处理器. 从原理上讲,注解处理器就是通过反射机制获取被检查方法上的注解信息,然后根据注解元素的值进行特定的处理. 注解处理器类库(java.lang.reflect.AnnotatedElement): Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Annotation类型的父接口.除此之外,Java在java.lang.reflect 包下新增了AnnotatedElement接口,该接口代表程序中可以接受注解

Java注释Annotation

 Java注释Annotation 从JDK 5开始,Java增加了对元数据(MetaData)的支持,也就是Annotation(注释).Annotation提供了一种为程序元素设置元数据的方法,程序元素包括修饰包.类.构造器.方法.成员变量.参数.局部变量,从某些方面来看,Annotation就想修饰符一样,可用于程序元素的声明,这些信息被存储在Annotation的"name = value"对中. 需要注意的是, Annotation是一个接口,程序可以通过反射来获取指定程

【转】XML注释与Description标签及Java:注解(Annotation)的关系

NET中的规范标准注释(一) -- XML注释标签讲解 一.摘要 .Net允许开发人员在源代码中插入XML注释,这在多人协作开发的时候显得特别有用. C#解析器可以把代码文件中的这些XML标记提取出来,并作进一步的处理为外部文档. 这篇文章将展示如何使用这些XML注释. 在项目开发中,很多人并不乐意写繁杂的文档.但是,开发组长希望代码注释尽可能详细:项目规划人员希望代码设计文档尽可能详尽:测试.检查人员希望功能说明书尽可能详细等等.如果这些文档都被要求写的话,保持它们同步比进行一个战役还痛苦.

【Servlet】java web 文件下载功能实现

需求:实现一个具有文件下载功能的网页,主要下载压缩包和图片 两种实现方法: 一:通过超链接实现下载 在HTML网页中,通过超链接链接到要下载的文件的地址 [html] view plain copy <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body&

Java中Annotation用法

Annotation Annotation其实是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相应的处理.通过使用Annotation,程序开发人员可以在不改变原有逻辑的情况下,在源文件嵌入一些补充信息.代码分析工具.开发工具和部署工具可以通过这些补充信息进行验证或者进行部署. Annotation提供了一条为程序元素设置元数据的方法,从某些方面来看,Annotation就像修饰符一样被使用,可用于修饰包.类.构造器.方法.成员变量.参数.局部变量的声明,这些信息被存储在An

java基础--Annotation

什么是注解(Annotation): Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法.Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的Annotion对象,然后通过Annotion对象来获取注解里面的元数据. 什么是metadata(元数据): 元数据从metadata一词译来,就是"关于数据的数据"的意思. 元数据的功能作用有很多,比如:你可能用过Javadoc的注释自动生成文档.这就