@Test
void jdkProxy() {
MemberServiceImpl target = new MemberServiceImpl();
ProxyFactory proxyFactory = new ProxyFactory(target);
proxyFactory.setProxyTargetClass(false); // JDK 동적 프록시
// 인터페이스로 캐스팅 성공
MemberService proxy = (MemberService) proxyFactory.getProxy();
// 구현 클래스로 캐스팅 시도 실패 ClassCastException 예외 발생
Assertions.assertThrows(ClassCastException.class, () -> {
MemberServiceImpl castingMemberService = (MemberServiceImpl) proxy;
});
}
@Test
void cglibProxy() {
MemberServiceImpl target = new MemberServiceImpl();
ProxyFactory proxyFactory = new ProxyFactory(target);
proxyFactory.setProxyTargetClass(true); // CGLIB 프록시
// 인터페이스로 캐스팅 성공
MemberService proxy = (MemberService) proxyFactory.getProxy();
// 구현 클래스로 캐스팅 시도 성공
MemberServiceImpl castingMemberService = (MemberServiceImpl) proxy;
}