gpt4 book ai didi

java - 使用byte buddy创建代理对象

转载 作者:行者123 更新时间:2023-12-02 12:11:59 25 4
gpt4 key购买 nike

我正在尝试使用 Byte Buddy 创建代理对象。我实际上想模拟任何类中的任何依赖项,如果对该依赖对象调用任何方法,它将向调用者返回一个预先确定的值。

public class Person{
private String name;
private Address address;

public Person(String name, Address address){
this.name = name;
this.address = address;
}
public String getAddress(){
return (address == null) "" : address.getStreet();
}
}

================================================== =======================

public class Address {
private String street;
public String getStreet() { return street; }

在上面的示例中,我想在 Person 类中以及每当调用 person.getAddress() 方法时模拟 Address。我想根据返回类型动态返回一个值。我是字节好友的新手。我能够创建一个子类,但不确定如何动态获取该方法的返回类型并返回我的预先确定的值。

最佳答案

你有机会注入(inject)提供给构造函数的值吗?在这种情况下,您只需为 Address 创建一个子类即可:

Address address = new ByteBuddy()
.subclass(Address.class)
.method(any()).intercept(MethodDelegation.to(MyInterceptor.class))
.make()
.load(Address.class.getClassLoader())
.getLoaded()
.newInstance();

具有类似于以下内容的委托(delegate):

public class MyInterceptor {
@RuntimeType
public static Object intercept(@Origin Method method) {
// create some return value or null for void
}
}

只需将此对象提供给构造函数即可。

关于java - 使用byte buddy创建代理对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46471753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com