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框架必须是公开无参数无返回值的
    
    //我们使用自己的注解
    @MyTest
    public void test1(){
        System.out.println("我是test1");
    }

    public void test2(){
        System.out.println("我是test2");
    }
    
    public void test3(){
        System.out.println("我是test3");
    }
    @MyTest
    public 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框架案例,加了注解就执行,不加注解就不执行。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/930371.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VUE脚手架练习

脚手架安装的问题: 1.安装node.js,配置环境变量,cmd输入node -v和npm -v可以看到版本号(如果显示不是命令,确认环境变量是否配置成功,记得配置环境变量之后重新打开cmd,再去验证) 2.在安装cnmp时&#xf…

unity3d—demo(实现给出图集名字和图片名字生成对应的图片)

目录 实现给出图集名字和图片名字生成对应的图片: 代码示例: dic: 键 是图集名称 值是一个字典 该字典键是图片名称 值是图片,结构如图: 测试代码: 结果: SpriteRenderer 讲解: Resour…

国内外网络安全政策动态(2024年11月)

▶︎ 1.13项网络安全国家标准自11月1日起实施 11月1日起,《网络安全技术 信息技术安全评估准则》等13项网络安全国家标准开始实施,其中,《网络安全技术 信息技术安全评估准则 第1-5部分》《网络安全技术 信息技术安全评估方法》等6项推荐性国…

Modbus Poll的使用

最近从串口调试助手接触到了Modbus Poll,一开始用的时候有些生疏,了解之后不得不说真香。 相对于串口调试助手,有些设备厂家会给一些点表和指令码,有些也可以通过modbus协议解析出来,相对来说,使用Modbus …

写NFC标签支持Android安卓Ohos纯血鸿蒙唤醒微信小程序

本示例使用的发卡器:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1b8bEEGz&ftt&id61539185785 Python languagecodestr "en".encode(gbk) titlestrself.lineEdit_title.text().strip().encode(gbk) uriheaderindex sel…

利用oracle spool配置数据导出脚本

一,spool配置项 set colsep |   //域输出分隔符 set echo off   //显示start启动的脚本中的每个sql命令,缺省为on set feedback off //回显本次sql命令处理的记录条数,缺省为on set heading off  //输出域标题,缺省为on…

单端和差分信号的接线法

内容来源:【单端信号 差分信号与数据采集卡的【RSE】【 NRES】【 DIFF】 模式的连接】 此篇文章仅作笔记分享。 单端输入 单端信号指的是输入信号由一个参考端和一个信号端构成,参考端一般是地端,信号就是通过计算信号端口和地端的差值所得…

前端基础——CSS

美化文档 HTML内部添加样式 本节我们来学习如何在标签中引入CSS样式。 1 在标签中添加声明 声明的关键字是style后接等号&#xff08;&#xff09;再接引号&#xff08;""&#xff09;&#xff0c;即style"" 具体声明如下&#xff1a; <input typ…

MATLAB 最小二乘点云拟合球 (89)

MATLAB 最小二乘点云拟合球 (89) 一、算法介绍二、算法实现1.代码2.结果这是缘,亦是最美的相见 一、算法介绍 球面拟合算法是一种通过数学方法将一组三维点(通常在三维空间中分布)拟合到一个理想的球形表面上。这个过程通常涉及使用最小二乘法来最小化实际数据点与拟合的…

安防视频监控平台Liveweb视频汇聚管理系统管理方案

智慧安防监控Liveweb视频管理平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。国标GB28181协议视频监控/视频汇聚Liveweb平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、…

elasticsearch-如何给文档新增/更新的字段

文章目录 前言elasticsearch-如何给文档新增/更新的字段1. 如何给某些文档新增/更新的字段2. 给所有文档添加/更新一个新的字段3. 测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且…

浅谈网络 | 应用层之流媒体与P2P协议

目录 流媒体名词系列视频的本质视频压缩编码过程如何在直播中看到帅哥美女&#xff1f;RTMP 协议 P2PP2P 文件下载种子文件 (.torrent)去中心化网络&#xff08;DHT&#xff09;哈希值与 DHT 网络DHT 网络是如何查找 流媒体 直播系统组成与协议 近几年直播比较火&#xff0c;…

性能测试基础知识jmeter使用

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;测试_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 性能指标 1. 并发数 (Con…

【机器学习】机器学习的基本分类-监督学习-决策树-ID3 算法

ID3&#xff08;Iterative Dichotomiser 3&#xff09;是决策树的一种构造算法&#xff0c;由 Ross Quinlan 在 1986 年提出。它主要用于分类问题&#xff0c;通过信息增益选择特征来构建决策树。ID3 假设数据是离散型特征&#xff0c;且不支持连续型数据。 1. 核心思想 划分标…

记录:ubuntu 使用chattts的过程。

你知道什么是穷人吗&#xff1f;穷人就是没钱还想学习。 git GitHub - 2noise/ChatTTS: A generative speech model for daily dialogue. 因为所以。cosyvoice&#xff0c;gpt-s . 0.先找一个目录吧。 1.命令行模式 duyichengduyicheng-computer:~/gitee$ git clone https:…

LabVIEW氢同位素单质气体定量分装系统

氢同位素单质气体在多个行业中有重要应用&#xff0c;如能源和化工。传统的分装方法面临精度和自动化程度不足的问题。为此&#xff0c;开发了一套基于LabVIEW和质量流量控制器的定量分装系统&#xff0c;提高分装精度和效率&#xff0c;同时减少资源浪费和环境污染。 项目背景…

分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测

分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测 目录 分类预测 | PSO-PNN粒子群优化概率神经网络多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-PNN粒子群优化概率神经网络多特征分类预测&#xff0c;运行环境Matlab2018b及以…

鸿蒙开发-Divider 组件

在 ArkTS 中&#xff0c;Divider组件是用于在界面上显示分割线的组件&#xff0c;以下是其详细介绍&#xff1a; 基本功能 Divider组件主要用于将页面中的不同部分进行视觉上的分隔&#xff0c;使页面布局更加清晰和有条理&#xff0c;增强用户界面的可读性和美观性。 常用属…

SpringBoot实战——个人博客项目

目录 一、项目简介 ?二、项目整体架构 数据库模块 后端模块 前端模块 ?三、项目具体展示 ?四、项目的具体实现 1、一些准备工作 ??数据库、数据表的创建 ??设置数据库和MyBatis的配置 ??将前端项目引入到当前项目中 2、登录注册模块 ??实体类的创建 ?…

利用sda剩余空间,扩容(lvm)

r如果余空间没有使用&#xff0c;直接扩容 pvdisplay vgdisplay pvresize /dev/sda3 扩展逻辑卷的大小&#xff1a; lvextend -l 100%FREE /dev/mapper/openeuler-root 对于ext4文件系统&#xff1a; resize2fs /dev/mapper/vg_openeuler-openeuler--root 对于xfs文件系…