2017-09-28 9 views
0

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 클래스로 주소를 모의하고 싶습니다. .getAddress() 메소드가 호출됩니다. 반환 유형에 따라 값을 동적으로 반환하고 싶습니다. Byte Buddy를 처음 접했습니다. 하위 클래스를 만들 수 있지만 동적으로 메서드의 형식을 반환하고 결정된 값을 반환하는 방법을 모르겠습니다.

답변

0

생성자에게 제공된 값을 삽입 할 수 있습니까? 이 경우, 당신은 단지 Address에 대한 하위 클래스를 만들 수 있습니다 유사한 대표와

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

을 :

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

는 단순히 생성자이 객체를 제공합니다.

+0

답변 해 주셔서 감사합니다. 그것은 나를 위해 일한, 그 자식 허브 위키 당신에게 비슷한 예제와 설명을 발견했다. 바이트 친구에게 더 많은 시간을 투자해야합니다. – Andy