[Javalist] Spring AOP advice nem fut

Gábor Garami gabor.garami at hron.me
2013. Okt. 7., H, 09:36:40 CEST


Kod statisztikahoz AOP? Szerintem nem erre valo. Vannak nagyon jo
profiler cuccok Javahoz, tessek veluk megismerkedni.
Garami Gábor
E-mail: gabor.garami at hron.me
Tel: +36 20 235 9621
MSN: hrgy at vipmail.hu
Skype: hron84


2013/10/6 István Székely <istvan.szekely1 at gmail.com>:
> Sziasztok!
>
> Előzetesen még egyszer leírom, hogy most már működik a dolog, de mivel
> hasznos dolgokat írtok, és érdekelnek a vélemények és a szép megoldás,
> vigyük tovább a szálat.
>
> Alapvetően két forgatókönyv volt. Az egyiket csak zárójelben jegyeztem meg
> korábban, viszont most ezt fogom kifejteni. Tehát a felállás az alábbi:
>
> 1. Bizonyos metódusok lefutásáról statisztikát kell készítsünk. Eddig a
> számlálók növelése bele volt drótozva minden egyes ilyen metódusba.
> Szerintem abban egyetértünk, hogy ez nem volt túl jó megoldás, ezért
> szerettük volna AOP-vel megcsinálni. (Itt volt az első ellenvetésetek, hogy
> az AOP-t nem arra próbáljuk használni, amire való. Most már ismert a feladat
> is.)
>
> 2. Adott egy osztály, aminek ismert a forrása, de nem tudom módosítani.
> Tekintsünk rá úgy, mint egy 3rd party framework osztályra. Ebben van
> definiálva a() és b() a már ismertetett módon.
>
> public abstract class FrameworkClass {
>     public void a() {
>         ...
>         b();
>         ...
>     }
>     public abstract void b();
> }
>
> 3. Adott a mi kis alkalmazásunk, amiben statisztikákat kellene gyűjteni a
> konkrét b() hívásokról. Erre szerettünk volna egy aspectet csinálni (ami egy
> bizonyos annotációt meglétét ellenőrzi a pointcut-ban).
>
> public class MyVeryImportantTask extends FrameworkClass {
>     @Statistics
>     @Override
>     public void b() {
>         ...
>     }
> }
>
> Ti hogyan oldanátok meg ezt a konkrét feladatot?
>
> 2013. október 4. 16:35 Peter Verhas írta, <peter at verhas.ch>:
>
>> Amikor egy osztályon belül hívsz meg egy privát metódust, akkor hiába van
>> egy
>>
>> proxy -> this
>>
>> objektumod, ahol a proxy.a() implementálja az interceptor funckcionalitást
>> mielőtt meghívja a this.a() metódust, mert az objektumon belül a hívás, by
>> default a this.a() metódust hívja meg.
>>
>> Példaképpen próbáld meg az X osztályodban egy
>>
>> X me;
>> void setMe(X me){ this.me = me;}
>>
>> setterrel beállítani, hogy ő kicsoda kívülről, onnan, ahol feteehetően a
>> proxy-t látod, és utána a me.a()-val meghívni az a()-t. Működni fog az AOP.
>> Persze nem ez a megoldás, hanem
>>
>
> Péter, tulajdonképpen pont ez történik, amikor az
> AopContext.currentProxy()-t használjuk, csak akkor nem kívülről állítjuk be
> a proxyt az advised osztálynak, hanem hagyjuk, hogy ő maga kérje el a saját
> proxy-ját a context-ből. Nem próbáltam ki, de bizonyára a te megoldásod is
> működne.
>
> Üdv,
> Stivi
>
>
> _______________________________________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/mailman/listinfo/javalist
>


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