i would substitute 'powerful' for 'bad' 
the idea of advised methods is to allow AOP advised methods to be introduced to 
the class e.g. 'logging'

JDKProxy vs CGLIB debate:
JDKProxy implements functionality thru interfaces

CGLIB
The proxies are created by sub-classing the actual class. This
means wherever an instance of the class is used it is also possible to
use the CGLib proxy.
The class needs to provide a default
constructor, i.e. without any arguments. Otherwise you'll get an
IllegalArgumentException: "Superclass has no null constructors but no
arguments were given." This makes constructor injection impossible.
The proxying does not work with final methods since the proxy sub class can not 
override the class' implementation.
The
CGLib proxy is final, so proxying a proxy does not work. You will get
an IllegalArgumentException saying "Cannot subclass final class
$Proxy0". But this feature is usually not needed anyway. (This issue might be 
solved in the future.)
Since
two objects are created (the instance of the class and the proxy as
instance of a sub class) the constructor is called twice. In general
this should not matter. I consider changing the class' state based on
constructor calls a code smell anyway.
You have CGLib as additional dependency.
based on what i see it is difficult to characterise CGLIB proxy implementation 
as 'lazy'
http://insufficientinformation.blogspot.com/2007/12/spring-dynamic-proxies-vs-cglib-proxies.html

Does this not conform to your understanding?
Martin Gainty 
______________________________________________ 
Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité
 
Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene Empfaenger 
sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte Weiterleitung 
oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht dient lediglich dem 
Austausch von Informationen und entfaltet keine rechtliche Bindungswirkung. 
Aufgrund der leichten Manipulierbarkeit von E-Mails koennen wir keine Haftung 
fuer den Inhalt uebernehmen.
Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le 
destinataire prévu, nous te demandons avec bonté que pour satisfaire informez 
l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est 
interdite. Ce message sert à l'information seulement et n'aura pas n'importe 
quel effet légalement obligatoire. Étant donné que les email peuvent facilement 
être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité 
pour le contenu fourni.




> Date: Tue, 18 Aug 2009 10:29:26 -0400
> Subject: Re: LoggingInterceptor
> From: w...@wantii.com
> To: user@struts.apache.org
> 
> Dale, honestly, I was being lazy and giving him the "quick" solution
> to his problem. The thing about that error is that it is pretty
> obvious what needs to be done, if you're versed in the arts of proxy
> class generation. Most people don't really look into what spring is
> doing behind the scenes, they are just happy that they get the service
> implementation they specify. In this case, spring recognizes that the
> class needs intercepted via AOP so it proxies it, but as you
> mentioned, since the spring default is to use JDK proxies, only
> methods inherited from from an interface will be exposed
> (limitation/feature [toemaytoe/toemahtoe] of jdk proxies).
> 
> IMO, choosing jdk over cglib or vice versa is pretty much a coin
> toss... You could argue the technical merit and the value of the
> requiring interfaces to be implemented. But, to me, it really comes
> down to the fact that none of that really matters since you are simply
> asking spring to choose one or the other. Maybe JDK proxies are a
> better design choice, but you don't really have any say as to how
> Spring designs/implements the proxies... The Spring code could be
> really bad for all we know. So, I just treat it like a black box, if I
> am trying to intercept action method invocations, I just let spring
> use CGLIB because I am aware of the limitation/feature of JDK proxies.
> Creating an interface that exposes the 'input1' method in his case
> sort of defeats the purpose of using AOP... I mean, if you have to
> change your code to use AOP, why not just change the code to execute
> the logic you want?
> 
> -Wes
> 
> On Tue, Aug 18, 2009 at 10:00 AM, Dale Newfield<d...@newfield.org> wrote:
> > Wes Wannemacher wrote:
> >>
> >> If you're using AOP, you'll need to tell spring to proxy classes using
> >> CGLIB rather than dynamic JDK proxies... To do so, you'll have to add
> >> the cglib jars to your project and add the following to your
> >> applicationContext.xml ->
> >>
> >> <aop:config proxy-target-class="true" />
> >
> > http://static.springsource.org/spring/docs/2.0.x/reference/aop-api.html#aop-pfb-proxy-types
> >
> > I understand if the OP has methods in the implementation that are not in the
> > interface that the interface based proxy won't have those methods.
> >
> > I'm unclear, though, whether your advice is a general suggestion, or just to
> > solve this specific problem (without the (IMHO) more advisable solution of
> > adding input1() to the implemented interface).  Without the OP's problems, I
> > don't understand what the benefit of having the auto-generated proxies
> > extend the class rather than implement the same interfaces would be.  It
> > seems that there are many more pitfalls (with private/protected, whether or
> > not the proxy calls super() methods (before then calling them on the wrapped
> > bean), etc.) with this solution, no?
> >
> > Sorry to ask spring questions on a struts list, but I'm just trying to
> > understand the already proffered advice.
> >
> > -Dale
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> > For additional commands, e-mail: user-h...@struts.apache.org
> >
> >
> 
> 
> 
> -- 
> Wes Wannemacher
> 
> Head Engineer, WanTii, Inc.
> Need Training? Struts, Spring, Maven, Tomcat...
> Ask me for a quote!
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
> 

_________________________________________________________________
Windows Live: Keep your friends up to date with what you do online.
http://windowslive.com/Campaign/SocialNetworking?ocid=PID23285::T:WLMTAGL:ON:WL:en-US:SI_SB_online:082009

Reply via email to