표준 Java 및 JPA API를 사용하여 클래스를 프록시 해제하는 솔루션을 찾았습니다. 최대 절전 모드로 테스트되었지만 종속성으로 최대 절전 모드가 필요하지 않으며 모든 JPA 공급자와 함께 작동해야합니다.
하나의 요구 사항-부모 클래스 (주소)를 수정하고 간단한 도우미 메소드를 추가해야합니다.
일반적인 아이디어 : 자신을 반환하는 부모 클래스에 도우미 메서드를 추가하십시오. 메소드가 프록시에서 호출되면 호출을 실제 인스턴스로 전달하고이 실제 인스턴스를 리턴합니다.
최대 절전 모드는 프록시 클래스가 자체 인스턴스를 반환하고 여전히 실제 인스턴스 대신 프록시를 반환한다는 것을 인식하므로 구현은 조금 더 복잡합니다. 해결 방법은 반환 된 인스턴스를 실제 래퍼 클래스와 다른 클래스 유형을 갖는 단순 랩퍼 클래스로 랩핑하는 것입니다.
코드에서 :
class Address {
public AddressWrapper getWrappedSelf() {
return new AddressWrapper(this);
}
...
}
class AddressWrapper {
private Address wrappedAddress;
...
}
주소 프록시를 실제 서브 클래스로 캐스트하려면 다음을 사용하십시오.
Address address = dao.getSomeAddress(...);
Address deproxiedAddress = address.getWrappedSelf().getWrappedAddress();
if (deproxiedAddress instanceof WorkAddress) {
WorkAddress workAddress = (WorkAddress)deproxiedAddress;
}