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.xdnf.cn/news/35365.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【华科X地平线】DiffusionDrive:端到端截断扩散模型

论文: https://arxiv.org/pdf/2411.14499 代码: https://github.com/hustvl/DiffusionDrive 0. 摘要 最近,扩散模型作为一种强大的生成式技术,已经出现在机器人策略学习领域,能够建模多模态动作分布。利用其进行端到端自动驾驶的能力是一个…

HarmonyOS 5.0应用开发——Ability与Page数据传递

【高心星出品】 文章目录 Ability与Page数据传递Page向Ability传递数据Ability向Page传递数据 Ability与Page数据传递 基于当前的应用模型,可以通过以下几种方式来实现UIAbility组件与UI之间的数据同步。 使用EventHub进行数据通信:在基类Context中提供…

【unity框架开发10】从零手搓一个UI管理器/UI框架,自带一个提示界面,还有自带DOTween动画效果(2024/10/10修改补充)

最终效果 文章目录 最终效果前言UI组件和布局的基础使用UI管理器1、新增UI面板层枚举2、初始化2.1、用代码创建画布2.2、用代码创建UI面板的父物体层2.3、代码添加EventSystem物体 3、ShowPanel显示面板方法4、HidePanel隐藏面板的方法5、CloseUI关闭界面的方法6、UI界面基类 测…

智能指针【C++11】

文章目录 智能指针std::auto_ptr std::unique_ptrstd::shared_ptrstd::shared_ptr的线程安全问题std::weak_ptr 智能指针 std::auto_ptr 管理权转移 auto_ptr是C98中引入的智能指针,auto_ptr通过管理权转移的方式解决智能指针的拷贝问题,保证一个资源…

Win11 24h2 不能正常ensp

Win11 24h2 不能正常ensp 因为Win11 24h2的内核大小更改,目前virtualbox在7.1.4中更新解决了。而ensp不支持5.2.44之后的virtualbox并已停止维护,不再进行5.2.44修复,virtualbox 5.2.24的ntdll文件sizeofimage问题,此问题导致ens…

使用GO--Swagger生成文档

概述 在前后端分离的项目中,后端配置swagger可以很好的帮助前端人员了解后端接口参数和数据传输。go-swagger 是一个功能全面且高性能的Go语言实现工具包,用于处理Swagger 2.0(即OpenAPI 2.0)规范。它提供了丰富的工具集&#x…

沃德云商协系统微信小程序PHP+Uniapp

“多组织”的云服务平台,打造总商会、总协会、总校友会、工商联等多组织无障碍沟通合作平台,让各大分会、各大分校友会、分组织实现轻松管理,线上宣传展示、商机挖掘、会员管理、会员服务、跨界交流等, 借助沃德云商协平台系统,让…

网站打开速度测试工具:互联网优化的得力助手

在信息飞速流转的互联网时代,网站如同企业与用户对话的窗口,其打开速度直接关乎用户体验,乃至业务的成败。所幸,一系列专业的网站打开速度测试工具应运而生,它们宛如幕后的技术侦探,精准剖析网站性能&#…

shell脚本实战案例

文章目录 实战第一坑功能说明脚本实现 实战第一坑 实战第一坑:在Windows系统写了一个脚本,比如上面,随后上传到服务,执行会报错 原因: 解决方案:在linux系统touch文件,并通过vim添加内容&…

Face2QR:可根据人脸图像生成二维码,还可以扫描,以后个人名片就这样用了!

今天给大家介绍的是一种专为生成个性化二维码而设计的新方法Face2QR,可以将美观、人脸识别和可扫描性完美地融合在一起。 下图展示为Face2QR 生成的面部图像(第一行)和二维码图像(第二行)。生成的二维码不仅忠实地保留…

数据结构---队列(Queue)

1. 简介 队列(Queue)是一种常用的数据结构,它遵循先进先出(FIFO,First In First Out)的原则。这意味着第一个进入队列的元素将是第一个被移除的元素。队列在计算机科学中有着广泛的应用,比如任…

玩游戏没有flash插件的解决方案(No Flash)

一、概述 在网页游戏开发领域,Flash和H5是两种主流的技术。Flash游戏曾经占据主导地位,但随着HTML5技术的发展和浏览器对Flash支持的逐渐减少,H5游戏逐渐成为主流。本教程将详细介绍Flash和H5的区别,并提供将Flash游戏转换为H5游戏…

如何查看电脑的屏幕刷新率?

1、按一下键盘的 win i 键,打开如下界面,选择【系统】: 2、选择【屏幕】-【高级显示设置】 如下位置,显示屏幕的刷新率:60Hz 如果可以更改,则选择更高的刷新率,有助于电脑使用起来界面更加流…

新书速览|循序渐进Node.js企业级开发实践

《循序渐进Node.js企业级开发实践》 1 本书内容 《循序渐进Node.js企业级开发实践》结合作者多年一线开发实践,系统地介绍了Node.js技术栈及其在企业级开发中的应用。全书共分5部分,第1部分基础知识(第1~3章)&#xf…

AUTOSAR AP和CP的安全要求规范(Safety Req)详细解读

一、规范的编制的背景原因 编制该规范的原因 确保系统安全性和可靠性 随着汽车电子系统日益复杂,功能不断增加,对安全性和可靠性的要求也越来越高。该规范为AUTOSAR平台在安全执行、配置、更新、信息交换、数据处理等多方面制定了明确要求,…

数仓技术hive与oracle对比(四)

问题处理 sqoop导入异常 将oracle数据库中的表,用sqoop导入hive时,如果表中字段值含有“,”,会导致导入hive后,每一行所有字段的内容都放在了第一个字段,其他字段均没有值。这是因为hive底层是以文件的形…

流网络等价性证明:边分解后的最大流保持不变

流网络等价性证明:边分解后的最大流保持不变 问题描述证明思路伪代码C 代码实现解释问题描述 在流网络中,证明将一条边分解为两条边所得到的是一个等价的网络。具体来说,假设流网络 $ G $ 包含边 $ (u, v) $,我们以如下方式创建一个新的流网络 $ G’ $: 创建一个新结点 $…

应用案例 | 船舶海洋: 水下无人航行器数字样机功能模型构建

水下无人航行器数字样机功能模型构建 一、项目背景 为响应水下装备系统研制数字化转型及装备系统数字样机建设的需要,以某型号水下无人航行器(Underwater Unmanned Vehicle,UUV)为例,构建UUV数字样机1.0功能模型。针对…

RabbitMQ七种工作模式之简单模式, 工作队列模式, 发布订阅模式, 路由模式, 通配符模式

文章目录 一. Simple(简单模式)公共代码:生产者:消费者: 二. Work Queue(工作队列模式)公共代码:生产者:消费者1, 消费者2(代码相同): 三. Publish/Subscribe(发布/订阅模式)公共代码:生产者:消费者: 四. Routing(路由模式)公共代码:消费者: 五. Topics(通配符模式)公共代码:生…

前端知识1html

VScode一些快捷键 Ctrl/——注释 !——生成html框架元素 *n——生成n个标签 直接书写html的名字回车生成对应的标签 常见标签 span&#xff1a; <span style"color: red;">hello</span> <span>demo</span> span实现&#xff1a; 标题…