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!