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

第十八节:第七部分: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.dtcms.com/a/289951.html

相关文章:

  • 【c++】leetcode5 最长回文子串
  • 【Project】ELK 7.17.16 日志分析系统部署
  • Day07_网络编程20250721(网络编程考试试卷)
  • 关于 URL 中 “+“ 号变成空格的问题
  • CentOS 7安装 FFmpeg问题可以按照以下步骤进行安装
  • Spring Boot 3核心技术面试指南:从迁移升级到云原生实战,9轮技术攻防(含架构解析)
  • Django实战:基于Django和openpyxl实现Excel导入导出功能
  • 基于python django的BOSS直聘网站计算机岗位数据分析与可视化系统,包括薪酬预测及岗位推荐,推荐算法为融合算法
  • 智能体性能优化:延迟、吞吐量与成本控制
  • django filter按两个属性 去重
  • JAVA面试宝典 -《 架构演进:从单体到 Service Mesh》
  • Go从入门到精通(26) - 一个简单web项目-实现服务注册
  • Go语言实战案例-读取CSV文件并打印
  • python 正则表达式
  • 借助 Amazon SageMaker Catalog 功能,简化从数据到洞察的路径
  • FastLLVE:实时低光视频增强新突破
  • 大端小端:数据存储的核心密码
  • Apache IoTDB(2):时序数据库 IoTDB 集群安装部署的技术优势与适用场景分析
  • 论文Review Lidar 3DGS Splat-LOAM: Gaussian Splatting LiDAR Odometry and Mapping
  • 【软件基础学习配置那些事 4-3】3ds Max2026 菜单栏常用命令-----文件、视图、编辑、工具、组
  • 深入详解随机森林在放射治疗计划优化中的应用及实现细节
  • 暴力破解练习
  • Reptile元学习算法复现实战:在Omniglot数据集上的少样本学习探索
  • 【AlphaFold3】网络架构篇(1)|概览+预测算法
  • 面试总结第54天微服务开始
  • 基础神经网络模型搭建
  • AI效能之AI单测(一)
  • MCP协议解析:如何通过Model Context Protocol 实现高效的AI客户端与服务端交互
  • c++ duiLib 使用xml文件编写界面布局
  • MyBatis Plus高效开发指南