Sep 13th, 2012, 12:04 PM
<aop:config> vs BeanNameAutoproxyCreator compatibility
Hi, Spring documentation states a warning message:
The <aop:config> style of configuration makes heavy use of Spring's auto-proxying mechanism. This can cause issues (such as advice not being woven) if you are already using explicit auto-proxying via the use of BeanNameAutoProxyCreator or suchlike. The recommended usage pattern is to use either just the <aop:config> style, or just the AutoProxyCreator style.
My questions are:
Does the documentation warning mean that <aop:aspectj-autoproxy> in combination with <aop:config> is considered dangerous?
Could someone explain it a bit more or point out an example where a conflict can occur (advice not being woven)? It works fine in my project. From technical point of view, there is a proxy created by <aop config> (Advised.getAdvisors returns aop config advisors) wrapped by another proxy created by BeanNameAutoProxyCreator (Adviced.getAdvisors returns its interceptors).
Sep 17th, 2012, 02:11 AM
You can end-up in proxying a proxy when using classbased proxies this can be painful (in general those classes are final). Also spring also expects, in some places, only 1 level of proxying going on (to retrieve the actual class) and with a double proxy this fails.
I always advice to use either one but to avoid using both (in general it leads to more trouble then it's worth).
Sep 17th, 2012, 03:24 AM
Thank you for the reasonable explanation.
Now I am curious why Spring does not merge these aspects to one proxy. Instead of proxying an existing proxy, it is possible (at least by the Spring proxy API - Advised#addAdvice()) to add an advice to the existing proxy. This sounds natural to me since both types of aspect definitions use the same autoproxy facility.
Sep 17th, 2012, 04:01 AM
The proxy doesn't have to be a spring based proxy next to that the 'older' proxying is working a little different (in regards to matching when/where to execute advices/interceptors) as compared to AspectJ so those are different.
There where several issues opened for this but this isn't resolved (also in general people don't mix different strategies).