注解在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); System.out.println(n.value()); } } }}
会输出NameTest的value --->“java”