Yani’s Weblog

it’s all about software engineering…

AspectJ – Example

Salah satu bahasa pemrograman yang mendukung aspect oriented programming (AOP) adalah Java dengan library-nya AspectJ. Sempat dibahas sedikit dari tulisan ini dan komentar-komentarnya

Berikut adalah beberapa konsep baru yang diperkenalkan dalam AOP:  joinpoint, poincut, dan advice.

Joinpoint merupakan definisi lokasi pada kode program, dimana saat eksekusi, aspek tertentu akan dieksekusi sesuai dengan aturan yang telah ditetapkan. Joinpoint didefinisikan di dalam sebuah aspect dengan menggunakan dua macam konstruktor, yaitu poincut dan advice.

Pointcut merupakan konstruktor yang digunakan untuk menunjuk joinpoint tertentu pada saat eksekusi. Sebuah pointcut dideklarasikan dengan menggunakan kata kunci pointcut. Ada banyak tipe poincut, berikut adalah contohnya untuk tipe pemanggilan method :   poincut lokasi1 () : call (int Date.getHour());

Artinya, kita mendefinisikan sebuah lokasi pada kode program (lokasi1), yaitu lokasi pemanggilan method getHour() dari kelas Date.

Advice mendefinisikan potongan kode yang akan dieksekusi pada sebuah joinpoint. Ada tiga jenis advice, yang masing-masing menentukan di sebelah mana advice tersebut akan disisipkan. Jenis advice pertama dieksekusi sebelum joinpoint (before advice), jenis kedua dieksekusi setelah joinpoint (after advice), dan yang terakhir dieksekusi pada joinpoint (around advice).

Contohnya:  before () : lokasi1 () { system.out.println (“Before : ” + thisJoinPoint);  }

Kode aspect yang lengkap untuk contoh di atas adalah sbb:

public aspect ngeDebug {
pointcut lokasi1 ()   :  call (int Date.getHour ());
before () : lokasi1 ()    { system.out.println (“Before : ” + thisJoinPoint);}}

Jadi, saat debuging misalnya, kita tidak perlu “menabur” kode println dimana-mana (yang kemudian sering lupa dihapus), tapi cukup mendefinisikan sebuah aspect ngeDebug seperti di atas…

January 14, 2009 - Posted by yaniwid | aspect oriented | | 8 Comments

8 Comments »

  1. He2m sebenarnya cara println(“\nhello\n”) masih menjadi cara favorit sampai saat ini,. :D

    Comment by dwinanto | January 14, 2009

  2. Nah kan… itu cara debugging paling primitif lho… :-)

    Comment by yaniwid | January 15, 2009

  3. Nampaknya cara debugging pakai printf() / println() tetap favorit, karena konsep itu sudah ada di kepala, dan gak perlu repot-repot belajar konsep baru. kadang bingung juga, waktu ini mending dipakai belajar konsep baru, atau buat ngejar setoran menyelesaikan kewajiban-kewajiban coding.

    Comment by waskita | January 16, 2009

  4. setuju, puts(“test”); tetap jadi favorit :D

    Comment by petra | January 18, 2009

  5. @Pak Waskita:
    Debugging hanya salah satu concern yang biasanya tersebar di banyak kelas. Masih banyak yang lainnya, yang -menurut para programmer- ternyata akan lebih mudah dikelola kalau dilokasisir sebagai aspect.

    @Petra:
    Ya, cara itu memang favorit ya…
    Tapi, saya harap, tidak sembarang menulis puts(..). Pastikan cara debug kita makin pintar. Sempat dibahas di sini.

    Comment by yaniwid | January 19, 2009

  6. Tapi kalau tanpa AOP, nampak sulit untuk mengimplementasikan Transaksi atau Logging ya.. Soalnya aspect-aspect tersebut “memotong-motong” program secara horizontal. Hehe..

    IMHO, logging yang ternyaman rasanya masih pakai Logger.. Bisa ada level-levelnya, seperti .debug(), .info(), atau .error().. =)

    Comment by Arie | March 2, 2009

  7. Ya Arie, aspect memang disebut sebagai construct yang membagi persoalan secara horisontal, sedangkan class membagi secara vertikal. Thx for sharing…

    Comment by yaniwid | March 2, 2009

  8. Mo tanyan kalo paka Annotation @Aspect so filenya bukan XXX.ap tap XXX.java, itu meng-instance object thisJoinPoint gmna yach????

    Comment by Dicky | November 26, 2009


Leave a comment