Casting a Spring's Proxy object to the actual runtime class

java, spring

Solution

Now you can use

AopTestUtils.getTargetObject(proxy)

.

The implementation is the same of @siulkilulki sugestion, but it's on Spring helper

Problem

I'm using Spring, at one point I would like to cast the object to its actual runtime implementation. Example: ``` Class MyClass extends NotMyClass { InterfaceA a; InterfaceA getA() { return a; } myMethod(SomeObject o) { ((ImplementationOfA) getA()).methodA(o.getProperty()); } } ``` That yells a `ClassCastException` since `a` is a `$ProxyN` object. Although in the beans.xml I injected a bean which is of the class `ImplementationOfA` . EDIT 1 I extended a class and I need to call for a method in `ImplementationOfA`. So I think I need to cast. The method receives a parameter. EDIT 2 I better rip off the target class: ``` private T getTargetObject(Object proxy, Class targetClass) throws Exception { while( (AopUtils.isJdkDynamicProxy(proxy))) { return (T) getTargetObject(((Advised)proxy).getTargetSource().getTarget(), targetClass); } return (T) proxy; // expected to be cglib proxy then, which is simply a specialized class } ``` I know it is not very elegant but works. All credits to http://www.techper.net/2009/06/05/how-to-acess-target-object-behind-a-spring-proxy/ Thank you!

Original source