Home > aspect oriented > AspectJ – Example

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…

Categories: aspect oriented
  1. January 14, 2009 at 8:43 pm

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

  2. January 15, 2009 at 12:37 pm

    Nah kan… itu cara debugging paling primitif lho…🙂

  3. January 16, 2009 at 4:41 pm

    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.

  4. January 18, 2009 at 5:51 pm

    setuju, puts(“test”); tetap jadi favorit😀

  5. January 19, 2009 at 12:04 pm

    @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.

  6. March 2, 2009 at 6:41 am

    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().. =)

  7. March 2, 2009 at 5:54 pm

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

  8. November 26, 2009 at 3:02 pm

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

  9. November 27, 2009 at 5:32 pm

    @dicky:
    Jika menggunakan annotation, potongan kode advice berikut:

    before(Foo foo) : call(* org.aspectprogrammer..*(..)) && this(foo) {
    System.out.println(“Call from Foo: ” + foo + ” at ”
    + thisJoinPoint);
    }

    Ditulis seperti ini:

    @Before(“call(* org.aspectprogrammer..*(..)) && this(foo)”)
    public void callFromFoo(JoinPoint thisJoinPoint, Foo foo) {
    System.out.println(“Call from Foo: ” + foo + ” at ”
    + thisJoinPoint);
    }

    Menggunakan annotation untuk aspect bisa dilihat di sini:
    http://www.eclipse.org/aspectj/doc/released/adk15notebook/ataspectj.html

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: