javaEE中自定义注解以及注解的解析
注解:
就是java代码里的特殊标记,比如@Override、@Test,作用是:让其它程序根据注解信息来决定怎么执行程序。
自定义注解:自己定义注解
Public @interface 注解名称{
Public 属性类型 属性名() default 默认值;
}
Value是特殊属性,可以不写明;如果有多个属性则要 指明value属性的值
注解的本质是一个接口 继承了Annotation接口
元注解 --- 注解的注解
@Target 声明注解只能在哪些位置上使用
@Retention() 注解的保留周期
source源码阶段 class阶段(默认) Runtime(开发常用)
注解@Target和@Retention可以用来修饰注解,是注解的注解,称为元注解
自定义注解代码实现:
package my.day02;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target({ElementType.TYPE,ElementType.METHOD})//修饰注解作用范围为类上和方法上
@Retention(RetentionPolicy.RUNTIME) //运行时也有效
public @interface MyTest4 {String value();double aaa() default 100.00;String[] bbb();}
什么是注解的解析?
就是判断类上、方法上、成员变量上是否存在注解,并且把注解里面的内容解析出来。
指导思想:要解析谁上面的注解,就应该先拿到谁。
解析类上面的注解,则应该先获取到该类的类对象,在通过class对象解析上面的注解。
使用上述注解的类:
package my.day02;
@MyTest4(value = "10",bbb = {"百度","夸克","阿里"})
public class Demo {@MyTest4(value = "200",bbb = {"steam","和平精英","王者荣耀"})public void test() {}
}
对注解进行解析的测试类:
写了两个测试方法,分别对类上的注解和方法上的注解进行解析。
package my.day02;import org.junit.jupiter.api.Test;import java.lang.reflect.Method;
import java.util.Arrays;public class AnnotationTest3 {@Test//解析类上注解的方法public void parseClass(){//1.先得到类对象Class<Demo> demoClass = Demo.class;//2.解析类上的注解//判断类上是否包含某个注解if (demoClass.isAnnotationPresent(MyTest4.class)){//强转成MyTest4 实际拿到的是注解类型MyTest4 myTest4 =(MyTest4) demoClass.getDeclaredAnnotation(MyTest4.class);System.out.println(myTest4.value());System.out.println(myTest4.aaa());//拿到是一个数组,转成字符串System.out.println(Arrays.toString(myTest4.bbb()));}}@Test//解析方法上注解的方法public void parseMethod() throws NoSuchMethodException {//1.先得到类对象,再得到方法对象Class<Demo> demoClass = Demo.class;Method test = demoClass.getDeclaredMethod("test");//2.解析类上的注解//判断类上是否包含某个注解if (test.isAnnotationPresent(MyTest4.class)){//强转成MyTest4 实际拿到的是注解类型MyTest4 myTest4 =(MyTest4) test.getDeclaredAnnotation(MyTest4.class);System.out.println(myTest4.value());System.out.println(myTest4.aaa());//拿到是一个数组,转成字符串System.out.println(Arrays.toString(myTest4.bbb()));}}
}
测试结果:
对类上的注解解析:

对方法上的注解解析:

