delegation java_如何使用Byte-Buddy从接口构建Java类的具体实...
我有一个界面,可以说它看起来像这样.
public interface TestObject {
String getString();
Long getLong();
}
我实际上想使用ByteBuddy构建该对象的具体实现.
这是我尝试过的.
public class Runme {
public static void main(String[] args) {
ByteBuddy bb = new ByteBuddy();
Class> clz = bb
.subclass(TestObject.class)
.method(any()).intercept(MethodDelegation.to(Interceptor.class))
.make()
.load(Object.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER)
.getLoaded();
try {
Object test = clz.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
public class Interceptor {
public Object intercept(@Origin String method, @AllArguments Object[] args) throws Throwable {
System.out.println("I have intercepted a call");
return "Hello";
}
}
}
我得到这个错误
Exception in thread "main" java.lang.IllegalArgumentException: None of [] allows for delegation from public boolean java.lang.Object.equals(java.lang.Object)
at net.bytebuddy.implementation.bind.MethodDelegationBinder$Processor.process(MethodDelegationBinder.java:881)
at net.bytebuddy.implementation.MethodDelegation$Appender.apply(MethodDelegation.java:1218)
at net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForDefinedMethod$WithBody.applyBody(TypeWriter.java:510)
at net.bytebuddy.dynamic.scaffold.TypeWriter$MethodPool$Record$ForDefinedMethod.apply(TypeWriter.java:444)
at net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForCreation.create(TypeWriter.java:3193)
at net.bytebuddy.dynamic.scaffold.TypeWriter$Default.make(TypeWriter.java:1481)
at net.bytebuddy.dynamic.scaffold.subclass.SubclassDynamicTypeBuilder.make(SubclassDynamicTypeBuilder.java:234)
at net.bytebuddy.dynamic.DynamicType$Builder$AbstractBase$AbstractDelegatingBuilder.make(DynamicType.java:2177)
at com.meta.testbytebuddy.Runme.main(Runme.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
我在做什么错..如果我想实现多个接口怎么办?
我正在使用ByteBuddy进行代码生成.
delegation java_如何使用Byte-Buddy从接口构建Java类的具体实...相关推荐
- 最新版Byte Buddy完全支持Java 11
Java字节码工程库Byte Buddy最新版本完全支持Java 11以及自Java 8以来引入的所有类文件和字节码新特性.其中包括新的ConstantDynamic(有时称为condy)特性和Jav ...
- 字节码增强技术 Byte Buddy 、Javassist、Instrumentation
概述 字节码增强技术 有 Byte Buddy .Javassist等多种. 如果是在同一个包中,没有问题,不需借助Instrumentation 如果是第三方包,想不修改代码的情况下实现代理技术,就 ...
- Java Agent简介及使用Byte Buddy和AspectJ LTW监控方法执行耗时
1.什么是Java Agent Java Agent提供了一种在加载字节码时,对字节码进行修改的方法.一共有两种方式执行:一种是在main方法执行之前,通过premain来实现:另一种是在程序运行中, ...
- 探针技术-JavaAgent 和字节码增强技术-Byte Buddy
能够基于Java Agent编写出普通类的代理 理解Byte Buddy的作用 能够基于Byte Buddy编写动态代理 1 Byte Buddy Byte Buddy 是一个代码生成和操作库,用于在 ...
- 基于Byte Buddy的探针开发实践
目录 前言 一.Bety Buddy是什么? 1.Bety Buddy 定义 2.代码生成的其他的库类 3.代码生产代理库类性能指标 二.使用步骤 1.引入库 2.核心代码示例 总结 前言 在研发生产 ...
- Byte Buddy 入门教程
为什么需要运行时代码生成 我们知道,Java 是一种强类型的编程语言,即要求所有变量和对象都有一个确定的类型,如果在赋值操作中出现类型不兼容的情况,就会抛出异常.强类型检查在大多数情况下是可行的,然而 ...
- 通过使用Byte Buddy,便捷地创建Java Agent
Java agent是在另外一个Java应用("目标"应用)启动之前要执行的Java程序,这样agent就有机会修改目标应用或者应用所运行的环境.在本文中,我们将会从基础内容开始, ...
- byte buddy学习笔记
字节码工程库具有ConstantDynamic特性,也可以被称为condy特性,和Java11的Nestmates.字节码工程库Byte Buddy支持Java 11以及自Java 8以来引入的所有类 ...
- abstract类_012 JAVA 抽象类、接口、String类的基础了解
1.抽象方法和抽象类 抽象方法:使用abstract修饰的方法,没有方法体,只有声明.抽象方法可以当做是一种规范,让子类必须实现. 注意: 1.抽象方法没有方法体,只能以分号结尾 2.抽象方法只能声明 ...
最新文章
- 12/12 day06
- matlab dsearchn,cKDTree与dsearchn
- xtrabackup 安装、备份和恢复
- js里规定输入的数值只能是数字
- Bayesian Neural Network for regression (PRML)
- 【网络安全】如何搭建MySQL恶意服务器读取文件?
- android服务的原理,Android学习笔记:IntentService
- 游戏行业的人工智能设计:AI的设计和实施
- 推荐一款.NET Core开源爬虫神器:DotnetSpider
- 计算机控制技术摘要,计算机控制技术摘要.ppt
- 轻轻松松统计代码行数
- Uva(10158)
- mysql 5.5 中创建的数据库名称全都是小写
- redis在window下的启动
- Linux中log打印输入输出的格式字符串
- Maven配置ojdbc14-10.2.0.4.0.jar
- OpenCV常用库函数
- https://blog.csdn.net/sxf359/article/details/71082404
- umount 无法成功
- 盛迈坤电子商务:网店有哪些营销活动
热门文章
- 在html中创建最小的文本标签是,HTML里面的文本标签
- mqtt 发送消息过多_eclipse mqttclient 性能MQTT(32202): 正在发布过多的消息
- Python自学日记---用户输入和while语句
- boost I 操作系统相关的库(一)
- 六顶思维帽的思考,敏捷开发?——By Me
- 子网掩码必须是相邻的是什么意思_子网划分与子网掩码
- 2022-3-25 Leetcode 921.使括号有效
- leetcode系列-226.翻转二叉树
- Psoc Creator 入门——接近感应组件的使用
- java中的uuid是啥,UUID在Java中的两种发作方式