[Javalist] Spring AOP advice nem fut

Zsombor gzsombor at gmail.com
2013. Okt. 4., P, 12:36:39 CEST


Valami olyasmire próbálod használni az aspektusokat, amire nem biztos, hogy
valók. Egy osztály belső implementációjába belenyúlni, és arra hagyatkozni,
hogy tudjuk, hogy az a() meghívja a b()-t, nem szerencsés.
Valszeg amúgy azért működik így, mert a proxy egy külön objektum példány,
ami csak delegálja a valós példányhoz a metódus hívásokat, miután lekezeli
az interceptor hívásokat.


Üdv
 Zs


2013/10/4 István Székely <istvan.szekely1 at gmail.com>

> Köszi Magyusz, ez lett a megoldás!
>
> Azért egy megjegyzésem lenne. Szerintem elég csúnya, hogy az advised
> osztálynak tudnia kell arról, hogy ő advised vagy nem, mert annak
> megfelelően kell leprogramozni a saját metódus hívását.
>
> Üdv,
> Stivi
>
>
>
> 2013. október 4. 1:34 Tamás Magyar írta, <magyusz at gmail.com>:
>
> AopContext.currentProxy()
>>
>> 2013/10/4 István Székely <istvan.szekely1 at gmail.com>:
>> > Hali!
>> >
>> > Igen, ez kimaradt: <aop:aspectj-autoproxy proxy-target-class="true"/>
>> >
>> > Tehát CGLIB-es proxy-k vannak. A többi rész is pont úgy van, ahogy
>> mondod,
>> > a() hívja b()-t, és mindkét metódus ugyanabban az osztályban van.
>> Először
>> > b() private volt, de aztán public-ot csináltam belőle, nehogy az legyen
>> a
>> > baj, de úgy sem megy.
>> > [Van egy olyan forgatókönyv is, hogy b() absztrakt, és egy másik
>> osztályban
>> > van implementálva, és akkor sem működik.]
>> >
>> > Nem emlékszel, mi volt a megoldás? A natív AspectJ-t kihagynám, ha
>> lehet.
>> >
>> > Üdv,
>> > Stivi
>> >
>> >
>> > 2013. október 4. 0:11 Ize írta, <sicher at freemail.hu>:
>> >
>> >> Hali!
>> >>
>> >> Nekem valamikor regen akkor volt ilyen problemam, ha a metodus
>> osztalyon
>> >> belulrol hivodott (hiaba volt public). Mitha osszefuggene a dolog a a
>> >> proxy-based AOP-pal (tippem szerint ezt hasznalod).
>> >> A public nem mindegy, mert a proxy-s csak azzal mukodik,
>> >> private/protected-hez native AspectJ weaving kell.
>> >>
>> >> Udv.:
>> >>   Ize
>> >>
>> >>
>> >> On 2013. 10. 03. 16:24, István Székely wrote:
>> >>
>> >> Sziasztok!
>> >>
>> >> Van egy annotációm, amit metódusok megjelölésére használok. Van egy
>> Spring
>> >> AOP-s aspect, ami úgy van megadva, hogy bizonyos csomagban és az
>> >> alcsomagokban az annotációval megjelölt metódusokra fusson le egy
>> @Around
>> >> advice.
>> >>
>> >> Tehát valami ilyesmi:
>> >>
>> >> @Aspect
>> >> public class A {
>> >>     @Pointcut("within(com.x.y.z..*) && @annotation(com.a.b.C)")
>> >>     public void p() {}
>> >>     @Around("p()")
>> >>     public void advice(...) { ... }
>> >> }
>> >>
>> >> Adott egy osztály, amiben van két metódus, a() és b(), közvetlenül
>> egymás
>> >> alatt definiálva, és mindkettő public (bár ez talán mindegy is). Ha az
>> >> annotációt a-ra teszem, akkor szépen lefut az advice, ha b-re, akkor
>> pedig
>> >> nem.
>> >>
>> >> Hogyan lehetséges ez, és főleg, mi a megoldás?
>> >>
>> >> Üdv
>> >> Stivi
>> >
>> >
>> >
>> > _______________________________________________
>> > Javalist mailing list
>> > Javalist at lists.javaforum.hu
>> > http://lists.javaforum.hu/mailman/listinfo/javalist
>> >
>> _______________________________________________
>> Javalist mailing list
>> Javalist at lists.javaforum.hu
>> http://lists.javaforum.hu/mailman/listinfo/javalist
>>
>
>
> _______________________________________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/mailman/listinfo/javalist
>
>
--------- következő rész ---------
Egy csatolt HTML állomány át lett konvertálva...
URL: <http://lists.javaforum.hu/pipermail/javalist/attachments/20131004/26c27310/attachment.html>


További információk a(z) Javalist levelezőlistáról