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

目录

1、什么是注解的解析?

2、解析注解的案例

1、自定义一个注解

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

3、解析注解

3、模拟Junit框架案例

1、自定义一个MyTest注解

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

3、写一个启动类

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

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

1、什么是注解的解析?

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

2、解析注解的案例

1、自定义一个注解

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

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

java 复制代码
@MyAnnotation(value = "大美丽",bbb={"爱漂亮","很精致"})
public class MyClass {

    @MyAnnotation(value = "小林子",aaa = 200,bbb={"爱学习","很努力"})
    private String myMethod(){
        return "一个成员方法而已";
    }
}

3、解析注解

三部曲:

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

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

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

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

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

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

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

java 复制代码
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、写一个启动类

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

注意看代码注释

java 复制代码
 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框架案例,加了注解就执行,不加注解就不执行。

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

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

相关推荐
古法老登瞎折腾10 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
学逆向的10 小时前
C 堆区内存管理
c语言·开发语言·网络安全
huoyueyi10 小时前
《融天AI-APP从0到1开发实录》
开发语言·lua
智能运维指南10 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
小满zs10 小时前
Go语言第十七章(反射)
后端·go
小满zs10 小时前
Go语言第十五章(JSON序列化)
后端·go
小满zs11 小时前
Go语言第十六章(自定义类型)
后端·go
yz_aiks11 小时前
Spring AI 2.1 ChatMemory 已过时用什么替代:迁移到 Session Memory 实战(JDBC 存储与会话压缩)
java·spring boot·大模型·ai agent·spring ai
金銀銅鐵11 小时前
[Java] 用 GUI 展示 EnumMap 增删键值对时的内部变化
java·后端·ai编程
学长毕设11 小时前
基于SpringBoot的上门洗车服务系统设计与实现
java·spring boot·后端