首页 > 其他分享 >自定义注解及使用

自定义注解及使用

时间:2022-11-08 16:35:16浏览次数:41  
标签:aClass 自定义 reader SelfAnnotation 使用 注解 annotation

自定义注解及使用

定义一个自定义注解

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SelfAnnotation {
    String value() default "";
}

定义一个类使用自定义注解

public class TestAnno {
    @SelfAnnotation(value = "hello world")
    public void sayHello() {

    }
}

简单解析自定义注解

                //通过反射创建对象  需要类的全路径
                Class<?> aClass = Class.forName("com.zhuoyue.TestAnno");
                //aClass.getAnnotation()获取类上的注解
                //获取所有方法的注解
                Arrays.stream(aClass.getDeclaredMethods()).forEach(method -> {
                    SelfAnnotation annotation = method.getAnnotation(SelfAnnotation.class);
                    System.out.println(annotation.value());
                });

项目中解析自定义注解(动态从/target中获取类名的全路径)

    @Test
    public void test2() throws Exception {
        //拼接资源路径
        String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
                ClassUtils.convertClassNameToResourcePath("com.zhuoyue.test") + "/**/*.class";
        //创建一个一个资源路径解析器
        ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
        //创建一个源数据读取工厂
        MetadataReaderFactory readerfactory = new CachingMetadataReaderFactory(resourcePatternResolver);
        //遍历资源解析器的所有资源
        Arrays.stream(resourcePatternResolver.getResources(pattern)).forEach(resource -> {
            //用于读取类信息
            MetadataReader reader = null;
            try {
                //通过源数据读取工厂创建一个reader对象
                reader = readerfactory.getMetadataReader(resource);
                //通过reader流读取对应资源类名(全路径)
                String className = reader.getClassMetadata().getClassName();
                //通过反射创建对象
                Class<?> aClass = Class.forName(className);
                //aClass.getAnnotation()获取类上的注解
                //获取所有方法的注解
                Arrays.stream(aClass.getDeclaredMethods()).forEach(method -> {
                    SelfAnnotation annotation = method.getAnnotation(SelfAnnotation.class);
                    System.out.println(annotation.value());
                });
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        });
    }

标签:aClass,自定义,reader,SelfAnnotation,使用,注解,annotation
From: https://www.cnblogs.com/WangJingjun/p/16870125.html

相关文章

  • LiveCD模式使用
    注:一定不可以用定制的母盘镜像,有格式化硬盘的风险,应该使用纯净版镜像操作,切记!!!一、进入livecd系统用uos系统(最好高于sp1版本)制作启动盘(U盘或者光盘),插在机器上,开机在BIOS或......
  • vue中使用Element
    官网https://element.eleme.cn/#/zh-CN/component/installation安装npm安装elementnpmielement-ui-S快速上手引入Element在main.js中写入以下内容:importVu......
  • 极简springboot+springdataJPA的使用,连接数据库
    1、首先在springboot的基础上引入maven依赖:一个mysql的驱动,一个整合的JPA使用包<!--https://mvnrepository.com/artifact/mysql/mysql-connector-java--><dep......
  • Stack Overflow 以18 亿美元已售出!我们还可以继续免费使用它吗?它的未来会怎么?
    英文| https://betterprogramming.pub/what-would-be-stack-overflows-future-after-this-1-8b-acquisition-607f50759699翻译|杨小二StackOverflow已以18亿美元的价......
  • lz 日记的使用
     实际上,在API中使用时,可以使用$db_name与当前数据库匹配......
  • 【操作说明】全能型H.265播放器如何使用?
    本播放器集成了公司业务的接口,包含了实播,回放,云台控制和回放速度控制,截图和全屏功能可以根据type直接初始化接口地址如果是第三方业务对接,也可以单独配置接口地址正确使用......
  • Vue3+Taro+NutUI 微信小程序使用canvas组件完成电子签名功能
    使用Taro小程序开发框架中的canvas组件实现电子签名功能,实现签名时屏幕自动横屏,可清空签名重签,可保存导出图片的64位码。请将手机屏幕横向在区域内进行签名重签完......
  • C++ 何时需要使用 引用 & ?
    原因:在C++中,由于以下原因,变量通过引用传递:1)要修改调用者函数的局部变量:引用(或指针)允许被调用函数修改调用者函数的局部变量。例如,考虑以下示例程序,其......
  • 使用前缀和数组解决"区间和查询"问题
    本文已收录到 GitHub·AndroidFamily,有Android进阶知识体系,欢迎Star。技术和职场问题,请关注公众号[彭旭锐]进Android面试交流群。前言大家好,我是小彭。今......
  • 使用axios请求,前端数字long类型精度问题解决方法
    今天开发遇到个问题,服务器后端的Long类型数据,传到前端会出现精度丢失,如:164379764419858435,前端会变成164379764419858430。在浏览器中做测试可知,这就是一个精度丢失的问题。......