标签:
1.介绍
注解是JavaSE5.0开始提供的一项新特性,利用此特性可以通过特定的注解标签为程序提供一些描述性信息。这些描述性信息可以在编译或运行时为编译器、运行环境提供附加的信息,从而简化开发。
2.自定义注解
1.声明自己的注解
@interface <注解名称>{<注解属性类型> <注解属性名称>[default<默认值>]}
<span style="font-family:SimSun;font-size:18px;">@interface myTest{ //自定义注解属性 String msg(); }</span>
2.确定注解使用目标目的不同,注解可以有不同的使用目标。例如对方法注解,对构造器注解,对变量字段注解,对类或者接口注解等等
@Target(ElementType.<使用目标点>)
<span style="font-family:SimSun;font-size:18px;">//声明此注解只能对类或者接口进行注解 @Target(ElementType.TYPE) @interface myTest{ //自定义注解属性 String msg(); }</span>3.确定注解的使用时效
根据使用目的不同,注解可以有不同的使用时效。
Class:注解存在于雷文件中,但在运行时虚拟机不可以获取注解信心
SOURCE:注解只存在于源代码中,在编译时被去除
RUNTIME:注解存在于类文件中,而且在运行时虚拟机可以获取注解信息
@Retention(RetentionPolicy.<时效值>)
<span style="font-family:SimSun;font-size:18px;">//声明此注解只能对类或者接口进行注解 @Target(ElementType.TYPE) //声明此注解在运行时可以获得 @Retention(RetentionPolicy.RUNTIME) @interface myTest{ //自定义注解属性 String msg(); }</span>
4.使用反射获取注解前几篇博客中谈到过反射,在这里也可以通过反射获取到注解的信息,方法与上述类似。
<span style="font-family:SimSun;font-size:18px;">package com.Annotation; import java.lang.annotation.*; import java.lang.reflect.*; //声明使用目标为TYPE的注解 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @interface MyAnnotationForClass { java.lang.String msg(); } // 声明使用目标为METHOD的注解 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) @interface MyAnnotationForMethod { java.lang.String msgPart1(); java.lang.String msgPart2(); } // 声明使用注解的类 @MyAnnotationForClass(msg = "这是对类的注解") class MyClass { @MyAnnotationForMethod(msgPart1 = "方法的第一部分注解", msgPart2 = "方法的第二部分注解") public void sayHello() { System.out.println("恭喜您成功地调用了sayHello方法!!!"); } } // 主类 public class Sample34_10 { public static void main(String[] args) throws NoSuchMethodException { // 获取使用了注解的类MyClass对应的Class对象 Class ac = MyClass.class; // 获取MyClass类的注解 MyAnnotationForClass mafc = (MyAnnotationForClass) ac .getAnnotation(MyAnnotationForClass.class); // 打印类的注解信息 System.out.println("MyClass类的注解信息为:“" + mafc.msg() + "”。"); // 获取指定方法对应的Method对象 Method method = ac.getMethod("sayHello", new Class[0]); // 获取方法对应的注解 MyAnnotationForMethod mafm = (MyAnnotationForMethod) method .getAnnotation(MyAnnotationForMethod.class); // 打印方法对应的注解信息 System.out.println("sayHello方法的第一部分注解信息为:“" + mafm.msgPart1() + "”。"); System.out.println("sayHello方法的第二部分注解信息为:“" + mafm.msgPart2() + "”。"); } } </span>上述实例中分别定义了两种注解信息,一种应用于类或者接口上;一种应用于方法上面;紧接着通过反射机制获取到相应的注解类,然后就可以操纵注解信息
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/luckyzhoustar/article/details/46738239