第十八节:第七部分:java高级:注解的应用场景:模拟junit框架

什么是注解的解析以及如何解析注解

代码:

解析注解的案例

代码:

MyTest2(注解)

java 复制代码
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

java 复制代码
package com.itheima.day10_annotation;
@MyTest2(value = "蜘蛛精",aaa = 99.5,bbb = {"至尊宝","黑马"})
public class Demo {
    @MyTest2(value = "孙悟空",aaa = 99.9,bbb = {"紫霞","牛夫人"})
    public void test1(){

    }
}

AnnotationTest2(主程序)

java 复制代码
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 {
    @Test
    public 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()));

        }

    }

    @Test
    public 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()));

        }
    }
}

模拟Junit框架的案例

MyTest(注解)

java 复制代码
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(主程序)

java 复制代码
package com.itheima.day10_annotation;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/*
* 目标:模拟Junit框架的设计。
* */
public class AnnotationTest3 {
    //@MyTest
    public void test1(){
        System.out.println("======test1======");
    }
    @MyTest
    public void test2(){
        System.out.println("======test2======");
    }
    @MyTest
    public 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);
            }
        }

    }
}
相关推荐
XLYcmy13 分钟前
信息检索报告数字经济赋能城市低碳治理的路径研究——基于“传统数据库 + 生成式人工智能”双轮驱动的检索实践 检索实施与结果分析 Web of Science
数据库·ai·llm·prompt·ssci·deepseek·wos
Decay__17 分钟前
21_MySQL 优化案例集 —— 慢 SQL 优化、索引重构与参数调整收益对比
运维·数据库·sql·mysql·架构
奶油话梅糖1 小时前
打开项目 0.9 秒、内存只有 IDEA 的 1/12:OpenIDEA 用 Rust 把 IntelliJ IDEA 重造了一遍
java·rust·github·intellij-idea
vipxieliang1 小时前
语言对比卡:PHP vs Go vs Java 的优缺点、适用场景与「为什么选 PHP」
java·go·php
Rain的Java大神之路1 小时前
公交App上“还有2站,约5分钟”怎么实现?90%的人答错这道大厂面试题:GPS漂移、ETA不准、10万QPS热点读全拆透(附完整代码)
java·后端·面试
codigger1 小时前
MySQL 深分页优化:limit 100000, 10 慢在哪,怎么救
数据库·sql·mysql·程序员
golang学习记1 小时前
IDEA 2026.3 远程开发迎来重磅升级
java·ide·intellij-idea·远程开发
麦壳饼1 小时前
SonnetDB 5.0 正式发布:增强 SQL 与事务,开放九模型 MCP 读写
数据库·人工智能·sql·sonnetdb
天天被压力2 小时前
【A股分钟级高频数据完全手册 #04】指数分钟级行情数据接口:沪深指数Pro版最新分时取数
java·人工智能·python
敲代码的小小酥2 小时前
谈SpringMVC与Spring WebFlux的区别与适用场景
java·后端·spring