当前位置: 首页 > 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框架案例,加了注解就执行,不加注解就不执行。

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

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

相关文章:

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

目录 1、什么是注解的解析? 2、解析注解的案例 1、自定义一个注解 2、在类和方法上使用自己定义的注解 3、解析注解 3、模拟Junit框架案例 1、自定义一个MyTest注解 2、定义一个测试类,使用自定义的注解 3、写一个启动类 本文章主要讲解什么是注…...

C# 命名空间(Namespace)

文章目录 前言一、命名空间的定义与使用基础(一)定义语法与规则(二)调用命名空间内元素 二、using 关键字三、嵌套命名空间 前言 命名空间(Namespace)在于提供一种清晰、高效的方式,将一组名称与…...

几个Linux系统安装体验: centos7系统服务版

本文介绍CentOS7服务版本的安装。 前言 当前国产操作系统版本众多,但根据笔者多年的实践经验得到的认知,最好能抓住底层逻辑,上下打通打透,拉齐表现和本质,就能在纷扰版本中看得清清楚楚,明明白白&#xf…...

ViT学习笔记(一) 基本的原理和框架结构

原论文地址:https://arxiv.org/pdf/2010.11929 首先大致通读一下原论文,这是很有必要的,但不必完全读懂,因为会有高手给我们解读,比如: 【Transformer系列】深入浅出理解ViT(Vision Transformer)模型-CSD…...

fedora下Jetbrains系列IDE窗口中文乱码解决方法

可以看到窗口右部分的中文内容为小方块。 进入 Settings - Appearance & Behavior - Appearance - Use custom font : Note Sans Mono CJK SC ,设置后如下图:...

nginx根据报文里字段转发至不同地址

nginx接收到post请求.请求报文里是一个json字符串,字符串里有个字段id。 根据id不同,转发到不同地址。 如果idaaa,转发到www.aaa.com.test 如果idbbb,转发到www.bbb.com.test 如何配置,请提供一个nginx.conf 要在 Nginx 中根据 POST 请求的 JSON 负载中的…...

使用 html/css 实现 educoder 顶部导航栏的步骤和方法

要使用HTML和CSS实现一个类似于Educoder网站的顶部导航栏,我们可以设计一个响应式、简洁且功能齐全的导航栏。Educoder的顶部导航栏通常包括网站的logo、主要导航项(如首页、课程、讨论等)、以及用户操作按钮(如登录、注册等&…...

EasyExcel导出列表

通过easyexcel导出列表数据 根据列表内容自适应宽高。 文件名冲突&#xff0c;修改文件名递增设置。 依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyexcel.version}</version&…...

【unity小技巧】分享vscode如何开启unity断点调试模式,并进行unity断点调试(2024年最新的方法,实测有效)

文章目录 前言一、前置条件1、已安装Visual Studio Code&#xff0c;并且unity首选项>外部工具>外部脚本编辑器选择为Visual Studio Code [版本号]&#xff0c;2、在Visual Studio Code扩展中搜索Unity&#xff0c;并安装3、同时注意这个插件下面的描述&#xff0c;需要根…...

【JavaScript】Object.keys() 和 Object.values() 的使用示例和相关的简单应用

值是数字的情况&#xff1a; let n 124; Object.keys(n) // [] Object.values(n) // []值是字符串的情况&#xff1a; let s "abc"; Object.keys(s) // [0, 1, 2] Object.values(s) // [a, b, c]值是数组的情况&#xff1a;&#xff08;常用&#xff09; let ar…...

SwiftUI 列表(或 Form)子项中的 Picker 引起导航无法跳转的原因及解决

概述 在 SwiftUI 的界面布局中&#xff0c;列表&#xff08;List&#xff09;和 Form 是我们秃头码农们司空见惯的选择。不过大家是否知道&#xff1a;如果将 Picker 之类的视图嵌入到列表或 Form 的子项中会导致导航操作无法被触发。 从上图可以看到&#xff1a;当在 List 的…...

基于ZYNQ-7000系列的FPGA学习笔记8——呼吸灯

基于ZYNQ-7000系列的FPGA学习笔记8——呼吸灯 1. 实验要求2. 功能分析3. 模块设计4. 波形图5.代码编写6. 代码仿真7. 添加约束文件并分析综合 上期内容&#xff0c;我们学习了按键控制蜂鸣器&#xff0c;这一期我们开始学习呼吸灯 1. 实验要求 控制领航者核心板上的led&#x…...

探索 Python 应用的分层依赖:解决 UOS 环境中的 libvirt-python 安装问题

探索 Python 应用的分层依赖&#xff1a;解决 UOS 环境中的 libvirt-python 安装问题 背景Python 版本升级 问题描述原因分析与解决方案 Python 应用的分层依赖&#xff1a;安装与部署的视角libvirt-python的分层依赖尝试的解决方案 使用编译好的 .whl 文件"嫁接"整个…...

OpenCV-平滑图像

二维卷积(图像滤波) 与一维信号一样&#xff0c;图像也可以通过各种低通滤波器&#xff08;LPF&#xff09;、高通滤波器&#xff08;HPF&#xff09;等进行过滤。LPF 有助于消除噪音、模糊图像等。HPF 滤波器有助于在图像中找到边缘。 opencv 提供了函数 **cv.filter2D()**&…...

解决跨域问题方案

跨域问题在前后端分离架构下尤为常见&#xff0c;是每个 Web 开发者都会遇到的核心问题。本文将通过原理解析、场景剖析、解决方案详解以及最佳实践等多个维度&#xff0c;帮助开发者全面理解并有效应对跨域问题。 目录 **一、跨域的本质****1. 同源策略****2. 同源策略的限制范…...

云计算介绍_3(计算虚拟化——cpu虚拟化、内存虚拟化、io虚拟化、常见集群策略、华为FC)

计算虚拟化 1.计算虚拟化介绍1.1 计算虚拟化 分类&#xff08;cpu虚拟化、内存虚拟化、IO虚拟化&#xff09;1.2 cpu虚拟化1.3 内存虚拟化1.4 IO虚拟化1.5 常见的集群的策略1.6 华为FC 1.计算虚拟化介绍 1.1 计算虚拟化 分类&#xff08;cpu虚拟化、内存虚拟化、IO虚拟化&#…...

软件工程复习记录

基本概念 软件工程三要素&#xff1a;方法、工具、过程 软件开发方法&#xff1a;软件开发所遵循的办法和步骤&#xff0c;以保证所得到的运行系统和支持的文档满足质量要求。 软件开发过程管理 软件生命周期&#xff1a;可行性研究、需求分析、概要设计、详细设计、编码、测…...

俩Nim游戏

1.给定n堆石子&#xff0c;每堆石子有xi快&#xff0c;两位玩家轮流操作&#xff0c;每次操作可以从任意一堆石子中拿走任意数量的石子&#xff08;可以拿完&#xff0c;但不能不拿&#xff09;&#xff0c;最后无法进行操作的人视为失败。 问如果两人都采用最优策略&#xff…...

基于超级电容和电池的新能源汽车能量管理系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 超级电容特性 4.2 电池特性 5.完整工程文件 1.课题概述 基于超级电容和电池的新能源汽车能量管理系统simulink建模与仿真。分析不同车速对应的电池&#xff0c;超级电容充放电变化情况。 2.系统仿…...

数据结构——图(遍历,最小生成树,最短路径)

目录 一.图的基本概念 二.图的存储结构 1.邻接矩阵 2.邻接表 三.图的遍历 1.图的广度优先遍历 2.图的深度优先遍历 四.最小生成树 1.Kruskal算法 2.Prim算法 五.最短路径 1.单源最短路径--Dijkstra算法 2.单源最短路径--Bellman-Ford算法 3.多源最短路径--Floyd-…...

别再为UI动画发愁了!用Spine+Unity 2021制作丝滑2D动画的保姆级流程

SpineUnity 2021&#xff1a;打造专业级2D UI动画的完整实战指南 在独立游戏开发领域&#xff0c;UI动画的质量往往决定着玩家的第一印象。那些流畅的按钮反馈、生动的界面过渡&#xff0c;不仅提升了产品质感&#xff0c;更直接影响着用户的留存率。然而对于资源有限的中小团队…...

4象限解析OpenRocket:开源火箭仿真工具的技术突破与实践指南

4象限解析OpenRocket&#xff1a;开源火箭仿真工具的技术突破与实践指南 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket 在模型火箭设计领域&#xff0c;物…...

DAMOYOLO-S快速上手:移动端浏览器访问Web服务与触屏操作适配说明

DAMOYOLO-S快速上手&#xff1a;移动端浏览器访问Web服务与触屏操作适配说明 1. 开篇&#xff1a;一个能“看懂”世界的AI助手 想象一下&#xff0c;你正用手机拍一张街景照片&#xff0c;屏幕上立刻就能标出“汽车”、“行人”、“交通灯”&#xff0c;甚至“手提包”。这不…...

网络安全零基础入门:借助快马AI生成你的第一个防注入登录页面

作为一名刚接触网络安全的小白&#xff0c;我最近尝试用InsCode(快马)平台做了一个防注入的登录页面。整个过程比想象中简单很多&#xff0c;特别适合零基础入门。这里分享我的实践心得&#xff0c;希望能帮到同样想学习网络安全的朋友。 为什么选择登录页面作为切入点 登录功…...

Pi0具身智能v1快速部署指南:一键启动交互测试页面

Pi0具身智能v1快速部署指南&#xff1a;一键启动交互测试页面 1. 环境准备与镜像部署 1.1 选择合适的基础环境 在开始部署Pi0具身智能v1之前&#xff0c;请确保您的平台满足以下基本要求&#xff1a; 硬件配置&#xff1a;建议至少16GB显存的GPU&#xff08;如NVIDIA RTX 3…...

TPAMI 2026 | 跨十大数据集验证,PoundNet重新审视AI图像检测范式

随着 AI 生成图像技术快速演进&#xff0c;伪造内容在网络传播风险持续上升&#xff0c;高鲁棒性检测技术因此成为学界与产业界关注的关键问题。然而&#xff0c;现有不少方法过于追求单一数据集上的短期收益&#xff0c;往往仅围绕“真/假”二分类目标对大规模预训练模型进行专…...

Leather Dress Collection 角色扮演效果:模拟不同风格的IT技术面试官

Leather Dress Collection 角色扮演效果&#xff1a;模拟不同风格的IT技术面试官 最近在玩一个挺有意思的AI工具&#xff0c;叫Leather Dress Collection。名字听起来有点怪&#xff0c;但它有个功能让我眼前一亮&#xff1a;角色扮演。你可以让它扮演各种角色&#xff0c;并且…...

别再踩坑了!KubeKey离线安装K8s v1.26.12时,containerd镜像拉取失败的完整避坑指南

KubeKey离线部署K8s集群&#xff1a;containerd镜像拉取全流程避坑手册 第一次用KubeKey离线部署Kubernetes集群时&#xff0c;containerd镜像拉取失败的问题让我折腾了大半天。看着部署日志里反复出现的证书错误提示&#xff0c;才意识到离线环境下的镜像仓库配置远比想象中复…...

Phi-4-mini-reasoning应对软件测试:自动生成测试用例与缺陷分析

Phi-4-mini-reasoning应对软件测试&#xff1a;自动生成测试用例与缺陷分析 1. 引言&#xff1a;软件测试的痛点与AI解决方案 在软件开发的生命周期中&#xff0c;测试环节往往占据30%-50%的项目时间。传统测试工作面临两大核心挑战&#xff1a;一是测试用例设计需要大量人工…...

GHelper:华硕笔记本轻量级替代方案与性能优化指南

GHelper&#xff1a;华硕笔记本轻量级替代方案与性能优化指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, …...