Stuart,
Your idea sounds good as well.
I think my original motivation was when I first started with Spring in 2008, we proxied an abstract DAO if we didn't need custom functionality. If we needed custom functionality, then we extended the abstract DAO making it concrete. There was a configuration in spring that let you do that, but at that point in time, it was useful to avoid writing the same code again and again.
I need to play around with that more to have a better answer.
Walter
On 07/12/2010 06:05 PM, Stuart Douglas wrote:
On 13/07/2010, at 2:20 AM, Pete Muir wrote:
We definitely want something like this in WeldX.
However I would argue we should follow the design of interceptors much more closely.
1) The aroundInvoke method should take an InvocationContext, returning null for getTarget (what is the reason for passing the proxy into the method in the design below)?
2) Drop the interface implementation requirement, and use the @AroundInvoke annotation
3) Add an annotation used to find the handlers e.g. @ServiceHandler
4) Add a meta-annotation @ServiceBinding(QueryInvocationHandler.class) @interface QueryService {}
WDYT?
Looks good, I was planning on doing the meta-annotation stuff at some point, and using AroundInvoke rather than implementing InvocationHandler is certainly an improvement.
I don't see why getTarget should return null though. Even though having access to the object may not be not particularly useful, I think that most people would find this behaviour surprising. Also they may want to call getClass() or use instanceof on the object to determine the exact type they are dealing with.