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

第十八节:第七部分:java高级:注解的应用场景:模拟junit框架

什么是注解的解析以及如何解析注解

什么是注解的解析以及如何解析注解

代码:

解析注解的案例

解析注解的案例

代码:

MyTest2(注解)

package com.itheima.day10_annotation;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 MyTest2 {String value();double aaa() default 100;String[] bbb();
}

Demo

package com.itheima.day10_annotation;
@MyTest2(value = "蜘蛛精",aaa = 99.5,bbb = {"至尊宝","黑马"})
public class Demo {@MyTest2(value = "孙悟空",aaa = 99.9,bbb = {"紫霞","牛夫人"})public void test1(){}
}

AnnotationTest2(主程序)

package com.itheima.day10_annotation;import org.junit.Test;import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.Arrays;/*
* 目标:掌握注解的解析(解析类上的注解、解析方法上的注解)。
* */
public class AnnotationTest2 {@Testpublic void parseClass() {// 1、先得到Class对象Class c = Demo.class;// 2、解析类上的注解// 判断类上是否包含了某个注解if (c.isAnnotationPresent(MyTest2.class)) {MyTest2 mytest2 =(MyTest2) c.getDeclaredAnnotation(MyTest2.class);System.out.println(mytest2.value());System.out.println(mytest2.aaa());System.out.println(Arrays.toString(mytest2.bbb()));}}@Testpublic void parseMethod() throws Exception {// 1、先得到Class对象Class c = Demo.class;Method m = c.getDeclaredMethod("test1");//解析方法上的注解// 判断方法对象上是否包含了某个注解if (m.isAnnotationPresent(MyTest2.class)) {MyTest2 mytest2 =(MyTest2) m.getDeclaredAnnotation(MyTest2.class);System.out.println(mytest2.value());System.out.println(mytest2.aaa());System.out.println(Arrays.toString(mytest2.bbb()));}}
}

结果1

模拟Junit框架的案例

模拟Junit框架

MyTest(注解)

package com.itheima.day10_annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD)// 注解只能注解方法。
@Retention(RetentionPolicy.RUNTIME)//让当前注解可以一直存活着。
public @interface MyTest {}

AnnotationTest3(主程序)

package com.itheima.day10_annotation;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;/*
* 目标:模拟Junit框架的设计。
* */
public class AnnotationTest3 {//@MyTestpublic void test1(){System.out.println("======test1======");}@MyTestpublic void test2(){System.out.println("======test2======");}@MyTestpublic void test3(){System.out.println("======test3======");}public static void main(String[] args) throws Exception {AnnotationTest3 a = new AnnotationTest3();//启动程序!// 1、得到Class对象Class c = AnnotationTest3.class;//2、提取这个类中的全部成员方法Method[] methods = c.getDeclaredMethods();// 3、遍历这个数组中的每个方法,看方法上是否存在@MyTest注解,存在//  触发该方法执行。for (Method method : methods) {if (method.isAnnotationPresent(MyTest.class)) {//说明当前方法上是存在@MyTest,触发当前方法执行method.invoke(a);}}}
}

结果

http://www.xdnf.cn/news/15939.html

相关文章:

  • 如何用纯 HTML 文件实现 Vue.js 应用,并通过 CDN 引入 Element UI
  • Python 进阶(七):XML 基本操作
  • 【编程语言】C、C++、C#深度对比:三种语言的演进历程与应用场景
  • Java 大视界 -- 基于 Java 的大数据分布式计算在地球物理勘探数据处理与地质结构建模中的应用(356)
  • numpy库的基础知识
  • oracle 数据库中,将几张表的数据按指定日期范围实时同步至同一个数据库的备份表中。
  • CLIP与SIGLIP对比浅析
  • 小架构step系列21:参数和返回值的匹配
  • FastAPI 中,数据库模型(通常使用 SQLAlchemy 定义)和接口模型(使用 Pydantic 定义的 schemas)的差异
  • 【智能协同云图库】智能协同云图库第二期:基于腾讯云 COS 对象存储—开发图片各功能模块
  • SQLite以及Room框架的学习:用SQLite给新闻app加上更完善的登录注册功能
  • 蜂窝物联网模组市场新展望:中国企业继续保持最强竞争力
  • 进阶向:基于Python的电脑硬件监控工具(GUI + 系统信息采集)
  • 51c大模型~合集157
  • 138. Java 泛型 - 通配符捕获Helper程序方法:类型安全解决方案
  • 二维码扫描登录流程详解
  • 【设计模式】迭代器模式 (游标(Cursor)模式)
  • JavaEE初阶第十期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(八)
  • WinUI3开发_Frame用法
  • 服务器设置国外IP无法访问对防御攻击有用吗?
  • 一文详解REST风格
  • 一个适合MCU的分级菜单框架
  • .NET SDK 9.0.200引入对SLNX解决方案文件的支持
  • django filter按两个属性 去重
  • Linux——自制shell命令行解释器
  • 【LeetCode 热题 100】208. 实现 Trie (前缀树)
  • 剖析Sully.ai:革新医疗领域的AI助手功能启示
  • ssms(SQL 查询编辑器) 添加快捷键 Ctrl+D(功能等于Ctrl+C + Ctrl+V),一步到位
  • Bun v1.2.19发布,node_modules隔离,sql比node快6倍
  • Kotlin 高阶函数初步学习