注解在java中使用非常普遍,尤其是在spring中。在这里简单了解一下注解
首先新建一个注解类 NameTest.java
package com.qiao.Annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(value=RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface NameTest { String value(); }
注解上面的@Target 表示注解NameTest的作用范围,其中ElementType是一个枚举类型为
public enum ElementType { /** Class, interface (including annotation type), or enum declaration */ TYPE, /** Field declaration (includes enum constants) */ FIELD, /** Method declaration */ METHOD, /** Parameter declaration */ PARAMETER, /** Constructor declaration */ CONSTRUCTOR, /** Local variable declaration */ LOCAL_VARIABLE, /** Annotation type declaration */ ANNOTATION_TYPE, /** Package declaration */ PACKAGE }
ElementType.METHOD 表示该注解作用在方法上
@Retention表示注解的作用时机,其中RetentionPolicy也是一个枚举类型,为
public enum RetentionPolicy { /** * Annotations are to be discarded by the compiler. */ SOURCE, /** * Annotations are to be recorded in the class file by the compiler * but need not be retained by the VM at run time. This is the default * behavior. */ CLASS, /** * Annotations are to be recorded in the class file by the compiler and * retained by the VM at run time, so they may be read reflectively. * * @see java.lang.reflect.AnnotatedElement */ RUNTIME }RetentionPolicy.RUNTIME 表示jvm运行时,此注解可被读出
这两个注解是必须要有的。
注解的使用:
先写一个测试类
public class AnnotationTest { @NameTest(value = "java") public void test(){ System.out.println(" bu niu bi "); } }
在写个Demo
import java.lang.annotation.Annotation; import java.lang.reflect.Method; import org.junit.Test; public class Demo { @SuppressWarnings("unchecked") @Test public void getAnnotation(){ for(Method m : meth){ if(m.isAnnotationPresent(NameTest.class)){ NameTest n = (NameTest) m.getAnnotation(NameTest.class); <span style="white-space:pre"> </span>System.out.println(n.value()); } } } }
会输出NameTest的value --->“java”