注解在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”