package spring;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.junit.Test;
//自定义注解
@Target(value={ElementType.FIELD,ElementType.TYPE,ElementType.METHOD})//表示该注解作用在什么上面,这三个参数分别表示为字段,类,方法
@Retention(RetentionPolicy.RUNTIME)//表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)
@interface myCheck{
int getAge() default 10;//方法的返回默认值是10
String getName() default "sunny"; //方法的返回默认值是sunny
String[] getSArray();
}
@myCheck(getAge=1,getName="aa",getSArray={"1","2"})//类注解,该注解可以不加age和name参数,因为其有默认值,而第三个参数没有默认值
public class CustomAnnotation {
@myCheck(getAge=0,getSArray={"1","2"})
private int age;
@myCheck(getAge=1,getName="aa",getSArray={"1","2"})//类注解,该注解可以不加age和name参数,因为其有默认值,而第三个参数没有默认值
public static void update(int age,String name,String [] arr){
// System.out.println(age);
// System.out.println(name);
// System.out.println(arr);
}
@Test//单元测试
public void main(){
Class<CustomAnnotation> c= CustomAnnotation.class;
if (c.isAnnotationPresent(myCheck.class)) {
myCheck annotations = c.getAnnotation(myCheck.class);
System.out.println(annotations.getAge()+";"+annotations.getName()+";"+annotations.getSArray().length);
}
}
}
刚开始想在被注解的方法里直接用变量名输出注解中参数的值,发现不可行,在网上查找才知道获取注解的值需要用反射机制,故用单元测试进行了测试,均在上面例子中展示