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

java注解(二):注解的解析以及应用场景、用注解和反射模拟junit框架代码演示

目录

1、什么是注解的解析?

2、解析注解的案例

1、自定义一个注解

2、在类和方法上使用自己定义的注解

3、解析注解

3、模拟Junit框架案例

1、自定义一个MyTest注解

2、定义一个测试类,使用自定义的注解

3、写一个启动类

本文章主要讲解什么是注解的解析、以及注解的解析应用场景(代码演示)、用注解和反射模拟junit框架代码演示

不清楚注解和反射的同学可以先看我之前发的文章哦

1、什么是注解的解析?

就是判断类上、方法上、成员变量上是否存在注解,并把注解里面的内容给解析出来

2、解析注解的案例

1、自定义一个注解

@Target({ElementType.TYPE,ElementType.METHOD})  //作用范围为类和方法
@Retention(RetentionPolicy.RUNTIME)   //运行时有效
public @interface MyAnnotation {String value();double aaa() default 100;String[] bbb();
}

2、在类和方法上使用自己定义的注解

@MyAnnotation(value = "大美丽",bbb={"爱漂亮","很精致"})
public class MyClass {@MyAnnotation(value = "小林子",aaa = 200,bbb={"爱学习","很努力"})private String myMethod(){return "一个成员方法而已";}
}

3、解析注解

三部曲:

1、得到需要解析的类的class对象,进而获取该类指定 方法名

2、判断类或者方法上是否有该注解isAnnotationPresent()

3、获取指定的注解对象getDeclaredAnnotation()

public class AnalysisAnnotation {public static void main(String[] args) throws Exception {//1、先得到需要解析的类的class对象Class myClassClass = MyClass.class;//判断类上是否有这个MyAnnotation注解if (myClassClass.isAnnotationPresent(MyAnnotation.class)){//获取指定的注解对象MyAnnotation myAnnotation = (MyAnnotation)myClassClass.getDeclaredAnnotation(MyAnnotation.class);System.out.println(myAnnotation.aaa());System.out.println(myAnnotation.value());System.out.println(Arrays.toString(myAnnotation.bbb()));}System.out.println("=========");Method declaredMethod = myClassClass.getDeclaredMethod("myMethod");//判断方法上是否有这个MyAnnotation注解if (declaredMethod.isAnnotationPresent(MyAnnotation.class)){//获取指定的注解对象MyAnnotation myAnnotation = (MyAnnotation)declaredMethod.getDeclaredAnnotation(MyAnnotation.class);System.out.println(myAnnotation.aaa());System.out.println(myAnnotation.value());System.out.println(Arrays.toString(myAnnotation.bbb()));}}
}

运行该方法,可以看到控制台的打印,正是我们使用注解是传入的值。

3、模拟Junit框架案例

实现方式:注解结合反射的方式

1、自定义一个MyTest注解

@Target(ElementType.METHOD) //表示只能作用在方法上
@Retention(RetentionPolicy.RUNTIME)  //表示生命为运行时有效
public @interface MyTest {
}

2、定义一个测试类,使用自定义的注解

其中方法test2()、test3()是没有加注解的

public class JunitTest {//使用Junit框架必须是公开无参数无返回值的//我们使用自己的注解@MyTestpublic void test1(){System.out.println("我是test1");}public void test2(){System.out.println("我是test2");}public void test3(){System.out.println("我是test3");}@MyTestpublic void test4(){System.out.println("我是test4");}
}

3、写一个启动类

我们需要启动加了注解的方法,没有加注解的方法则不启动。

注意看代码注释

 public static void main(String[] args) throws Exception {JunitTest junitTest = new JunitTest();//1、获取JunitTest类的class文件Class junitTestClass = JunitTest.class;//2、获取该类的所有方法Method[] declaredMethods = junitTestClass.getDeclaredMethods();for (Method declaredMethod : declaredMethods) {//3、判断该方法是否加了@MyTest注解if (declaredMethod.isAnnotationPresent(MyTest.class)){//4、如果已经包含该注解,则该方法启动。记住方法是依赖于对象的,所以我们得实例化一个对象传进去。declaredMethod.invoke(junitTest);}}}

执行该启动类,可以看到只有加了@MyTest注解的方法才会执行

注解是用来标记程序,是为了让其他程序根据注解信息决定怎么去对待它们。

例如Junit框架案例,加了注解就执行,不加注解就不执行。

以上就是我对如何自定义框架的理解啦,希望能帮到大家,有问题的地方欢迎大家一起讨论!

后续会不断更新作品,欢迎大家一起讨论学习。❤❤❤

http://www.lryc.cn/news/498661.html

相关文章:

  • C# 命名空间(Namespace)
  • 几个Linux系统安装体验: centos7系统服务版
  • ViT学习笔记(一) 基本的原理和框架结构
  • fedora下Jetbrains系列IDE窗口中文乱码解决方法
  • nginx根据报文里字段转发至不同地址
  • 使用 html/css 实现 educoder 顶部导航栏的步骤和方法
  • EasyExcel导出列表
  • 【unity小技巧】分享vscode如何开启unity断点调试模式,并进行unity断点调试(2024年最新的方法,实测有效)
  • 【JavaScript】Object.keys() 和 Object.values() 的使用示例和相关的简单应用
  • SwiftUI 列表(或 Form)子项中的 Picker 引起导航无法跳转的原因及解决
  • 基于ZYNQ-7000系列的FPGA学习笔记8——呼吸灯
  • 探索 Python 应用的分层依赖:解决 UOS 环境中的 libvirt-python 安装问题
  • OpenCV-平滑图像
  • 解决跨域问题方案
  • 云计算介绍_3(计算虚拟化——cpu虚拟化、内存虚拟化、io虚拟化、常见集群策略、华为FC)
  • 软件工程复习记录
  • 俩Nim游戏
  • 基于超级电容和电池的新能源汽车能量管理系统simulink建模与仿真
  • 数据结构——图(遍历,最小生成树,最短路径)
  • 002-NoSQL介绍
  • qt-everywher交叉编译e-src-5.15.2
  • 4.STM32通信接口之SPI通信(含源码)---硬件SPI与W25Q64存储模块通信实战《精讲》
  • 生信技能63 - 构建gnomAD变异位点的SQLite查询数据库
  • 0x0118消息 WM_SYSTIMER
  • 【机器学习】机器学习的基本分类-无监督学习(Unsupervised Learning)
  • [代码随想录09]字符串2的总结
  • java注解(一):什么是注解?什么是元注解?如何自定义注解?注解的原理是什么?
  • AD20 原理图库更新到原理图
  • .NET用C#导入Excel数据到数据库
  • 小身躯大能量-供热系统通过EtherCAT转Profinet网关进行升级