javassist动态给方法添加注解,动态给形参添加注解,动态给类添加注解

参考文档

这个写的挺全的,就是写的有点丑

javassist教程_不懂人情世故的博客-CSDN博客_java javassist转载 https://www.cnblogs.com/rickiyang/p/11336268.htmljavassist使用全解析Java 字节码以二进制的形式存储在 .class 文件中,每一个 .class 文件包含一个 Java 类或接口。Javaassist 就是一个用来 处理 Java 字节码的类库。它可以在一个已经编译好的类中添加新的方法,或者是修改已有的方法,并且不需要对字节码方面有深入的了解。同时也可以去生成一个新的类对象,通过完全手动的方式。. 使用 Javassist 创建一个https://blog.csdn.net/qq_42114504/article/details/123229026?spm=1001.2014.3001.5506

这个写的不多,但是实用

Javassist注解(Annotation)的使用:CXF WebService动态生成 - coshaho - 博客园设计一个对接系统,通过动态模型的增删改触发业务系统相应服务的调用。模型增删改方法动态发布为WebService服务。WebService服务采用CXF发布,动态类生成采用Javassist。由于Webhttps://www.cnblogs.com/coshaho/p/5105545.html

用来测试的类

最终结果

注:方法有参数,才会有参数注解

        //获取类池ClassPool classPool = ClassPool.getDefault();CtClass ctClass = null;try {//获取类ctClass = classPool.getCtClass("aa.bb.cc.AAAA");//获取方法CtMethod method = ctClass.getDeclaredMethod("bbb");ClassFile classFile = ctClass.getClassFile();ConstPool constPool = classFile.getConstPool();// 添加类注解AnnotationsAttribute bodyAttr = new AnnotationsAttribute(constPool, AnnotationsAttribute.visibleTag);Annotation bodyAnnot = new Annotation(Controller.class.getName(), constPool);bodyAttr.addAnnotation(bodyAnnot);classFile.addAttribute(bodyAttr);// 添加方法注解AnnotationsAttribute methodAttr = new AnnotationsAttribute(constPool, AnnotationsAttribute.visibleTag);Annotation methodAnnot = new Annotation(GetMapping.class.getName(), constPool);methodAttr.addAnnotation(methodAnnot);method.getMethodInfo().addAttribute(methodAttr);// 添加参数注解 注:参数注解,必须方法有参数才会生成ParameterAnnotationsAttribute parameterAtrribute = new ParameterAnnotationsAttribute(constPool, ParameterAnnotationsAttribute.visibleTag);Annotation paramAnnot = new Annotation(RequestBody.class.getName(), constPool);Annotation[][] paramArrays = new Annotation[1][1];paramArrays[0][0] = paramAnnot;parameterAtrribute.setAnnotations(paramArrays);method.getMethodInfo().addAttribute(parameterAtrribute);/*将修改后的CtClass加载至当前线程的上下文类加载器中,CtClass的toClass方法是通过调用本方法实现。需要注意的是一旦调用该方法,则无法继续修改已经被加载的class;通过类加载器加载该CtClass。*/ctClass.toClass();//根据CtClass生成 .class 文件ctClass.writeFile("D:\\projectDemo\\swagger-aotu-demo\\silence-spring-auto\\src\\main\\java\\aa\\bb\\cc\\bb");} catch (Exception e) {e.printStackTrace();}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决javassist不能重复加载字节码的问题

因为我的是一个接口,所以麻烦诸多。 事实上在类加载前做好准备工作,不会遇到这个问题,但是我正巧,在使用javassist的时候需要加载类,因为我要读取源码,拿到注释,再通过ssit 修改字节码&#xf…

根据type类型判断是否为基本数据类型,或基本数据类型的包装类,或泛型为基本数据类型

根据type类型判断是否为基本数据类型,或基本数据类型的包装类,或泛型为基本数据类型 /*** 判断是否为基本数据类型,或基本数据类型的包装类,或泛型为基本数据类型* string true* int true* Integer true* String[] true* user[] …

根据参数类型,获取泛型里所有的引用clazz,获取泛型实际参数

/*** 根据参数类型&#xff0c;获取泛型里所有的引用clazz* 列&#xff1a; public List<PageResult<List<User>>> intTest(RequestEntity<Map<String, List<PageResult<User>>>> req)** aClass class org.springframework.http.Re…

根据class判断是否为基本数据类型,或基本数据类型的包装类,或基本类型的数组,不考虑泛型

/*** 判断是否为基本数据类型&#xff0c;或基本数据类型的包装类&#xff0c;不考虑泛型* string true* int true* Integer true* String[] true* user[] false* List<string> false* list<user> false*/private static boolean isPrimitive(Class<?> cl…

反射根据类型,提取引用类型clazz

根据反射&#xff0c;提取引用类型&#xff0c;不包含基本数据类型&#xff0c;以及基本数据类型的包装类&#xff0c;及单列集合&#xff0c;和双列集合 /*** 是否为引用数据类型*/private static boolean isPrimitive(Class<?> clazz) {if (clazz.equals(String.class…

通过反射遍历属性,找出基本数据类型,和自定义引用类,以便生成接口文档时使用

/*** 是否为一个用户标准bean&#xff0c;不考虑泛型情况*/private static boolean isBean(Class<?> clazz) {if (clazz.equals(String.class) || ClassUtil.isBasicType(clazz)) {return false;}if (clazz.isArray() && ClassUtil.isSimpleValueType(clazz.get…

通过反射还原实际参数类型

/*** 根据类型提取所有关联参数*/public static void getAllParameter(Type type, List<Class<?>> list) {Class<?> c1 TypeUtil.getClass(type);if (type instanceof ParameterizedType) {Type[] ts ((ParameterizedType) type).getActualTypeArguments…

通过反射复原完整的src方法名称

/*** 根据方法名&#xff0c;生成完整的方法行** param clazz 字节码* param method java.lang.reflect method* return public static Annotation getAnnotation(Class<?> clazz, ConstPool constPool);*/public static String getSrcMethod(Class<?> clazz, M…

js关闭iframe窗口_[Selenium]24.处理弹窗新式的模态窗口

场景页面上弹出的对话框是自动化测试经常会遇到的一个问题。很多情况下这个弹出的对话框是一个iframe&#xff0c;处理起来有点麻烦&#xff0c;需要进行switch_to操作. 请参考文章测试曾哥&#xff1a;[Selenium]23.对话框的处理​zhuanlan.zhihu.com但现在很多前端框架的对话…

android 暂停其他app的声音_【一万个APP】第二十二期潮汐

基本信息分类:健康健美版本:Android-2.5.3 IOS-2.5.2更新时间:Android:2019.02.26 IOS:2019.03.06IOS评分(N/H):4.9/4.9开发商: 广州多少网络科技有限公司官方网站: https://tide.moreless.io/Android下载量:13,960,000IOS同类排名:52体验版本: Android-2.5.3PS&#xff1a;最近…

c语言判断字符串是不是回文_LeetCode 热题 HOT 100 5. 最长回文子串

题目题解暴力法我们根据回文字符串特点进行判断一个字符串是不是回文。// 回文子串&#xff1a;首尾对称相等const isPalindrome s > { // abba aba for (let i 0; i < Math.floor(s.length / 2); i) { if (s[i] ! s[s.length - 1 - i]) { ret…

random list随机生成不重复数

有一个需求&#xff0c;需要随机生成六位数&#xff0c;从100001 ---999999但是又要不重复&#xff0c;且不影响性能。如果每次生成都去判断是否重复&#xff0c;当生成的次数足够多&#xff0c;会影响性能。我想的是开一条线程&#xff0c;提前去处理。 提前生成好随机的数。直…

django 默认查询条件_Python之Django系列-创建第一个应用-4

上一篇&#xff1a;Python之Django系列-创建第一个应用-3 上一篇文章我们介绍了创建项目&#xff0c;打开浏览器访问http://127.0.0.1:8000/polls/&#xff0c;能看见"投票主页视图"等描述。本篇文章我们接着上一篇文章继续学习&#xff0c;在Python之Django系列-初始…

Exception in thread “main“ java.lang.IllegalArgumentException: Illegal Capacity: -1

创建list集合下标超出。 模拟场景 我是由于创建list &#xff0c;大小的时候&#xff0c;写反了

三相同步电机怎么接线图_智能电表怎么接线 单相 三相电表接线图大全

电表分为单相电表和三相电表&#xff0c;接线方法又为直入式和互感式&#xff0c;现在我们分电表种类和接线方法&#xff0c;来讲解电表接线。单相电表直入式接线方法&#xff1a;家用单相电表的接线必须是左火L&#xff0c;右零N&#xff0c;左边火线进&#xff0c;火线出&…

window navicat连接阿里云服务器mysql步骤及常见问题

先登录自己的阿里云服务器 这有两个比较重要的&#xff0c;一个是配置出口端口&#xff0c; 还有一个就是拿到自己的公网ip 连接上服务器 我用的是finalshell 工具连接。 主要是基于docker安装mysql &#xff0c;现在我的服务器docker已经安装了&#xff0c;安装也很简单。网…

docker安装mysql并使用navicat连接

创建映射目录&#xff0c;我安装在用户目录下 mkdir ~/mysql mkdir ~/mysql/conf mkdir ~/mysql/logs mkdir ~/mysql/data 分别执行以上命令&#xff0c;创建文件目录 #启动 docker run -id \ -p 3306:3306 \ --namemysql \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/lo…

linux centos7下载安装zlib

安装nginx 缺少zlib依赖&#xff0c;由于各种环境无法拉取yum安装&#xff0c; yum安装 yum install -y zlib zlib-devel 手动安装 zlib 版本预览 Index of /fossilshttp://www.zlib.net/fossils/ 解压 tar -zxvf zlib-1.2.8.tar.gz 进入加压后的文件 cd zlib-1.2.8 执行…

idea 升级到2020后 无法启动_升级iOS 14尝鲜后,无法降级 iOS13.5.1?

北京时间6月23日凌晨1点&#xff0c;苹果在线上举行了WWDC 2020全球开发者大会。给我们正式带来了iOS 14&#xff0c;并且在凌晨3点半时的时候&#xff0c;苹果发布 iOS 14 beta 内测版系统&#xff0c;并提供内测升级方法&#xff0c;随后很多用户已经升级体验。但是尝鲜之后&…

【pcre 依赖】linux安装pcre 依赖

记录转载 一、pcre PCRE(Perl Compatible Regular Expressions)是一个轻量级的Perl函数库&#xff0c;包括 perl 兼容的正则表达式库。它比Boost之类的正则表达式库小得多。PCRE十分易用&#xff0c;同时功能也很强大&#xff0c;性能超过了POSIX正则表达式库和一些经典的正则…