This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
If your annottated class is built to an interface, Spring AOP internally creates a Java proxy at runtime, and replaces the bean with the proxy bean
So, let's say you had a bean declared like this
this can be considered to be functionally equivalent to
If the bean is annottated with an aspect, you can consider that during initialization time, Spring creates this class
and the beans will be created like this
Please note the above code is for explanation only. Internally what happens is differrent.
So, here's the pitfall.. The proxy class implements only the methods in the interface. So, if you are using reflection on the proxy, you will not get all the methods. You will get only the interface methods. What you need to do is for the non interface methods, you need to get the underlying target object. I haven't done this myself before but I think this will work. You might have to try it. Every AOP proxy implements the org.springframework.aop.framework.Advised interface. This interface has a method to get the targetSource, and you can get the target object.
I think this will work. Maybe there is a better way of doing it.