当前位置: 首页 > news >正文

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()));}}
}

测试结果:

对类上的注解解析:

 对方法上的注解解析:


http://www.mrgr.cn/news/4182.html

相关文章:

  • 【HTML】从0开始构建HTML页面
  • 探索Ruby在物联网世界的无限可能:智能连接与创新应用
  • 高校迎新系统app/基于android的高校迎新系统的设计与实现
  • Tomcat使用及负载均衡(最全源码安装及配置使用教程)
  • 如何提升网络对AI大模型流量的承载能力?
  • kotlin adapter赋值失效
  • 使用dockerDesktop下载x86,amd64,arm64镜像
  • 【STM32 FreeRTOS】任务
  • 生活垃圾填埋场污染监测:新标准下的技术革新与环境保护
  • MBR20100FCT-ASEMI无人机专用MBR20100FCT
  • 绝对能让你效率起飞的10个AI工具及ChatGPT国内镜像集合【2024必备】
  • IPC对象通信方式---共享内存 | 网络通信 -编程
  • C++ //练习 17.33 修改11.3.6节(第392页)中的单词转换程序,允许对一个给定单词有多种转换方式,每次随机选择一种进行实际转换。
  • Go小技巧易错点100例(十七)
  • 养猫劝退?猫咪掉毛严重怎么办?用宠物空气净化器高效清理浮毛
  • C++竞赛初阶L1-14-第六单元-数组(31~33课)539: T456469 与指定数字相同的数的个数
  • 代码随想录算法训练营day51:图论02:99. 岛屿数量;100. 岛屿的最大面积
  • Ruby GUI宝典:探索顶级图形界面库
  • 故障频发,给我一个完美的解释...
  • 基于Kotlin Multiplatform实现静态文件服务器(二)