/blog/*

Around Advice Menggunakan Spring Aopalliance

Pada tulisan sebelumnya kita telah membuat program sederhana yang mengimplementasikan 2 buah advice/aspect sebelum dan sesudah eksekusi target melalui 2 buah class yaitu LogBeforeAdvice dan LogAfterAdvice. Lantas adakah cara mengimplementasikan advice sebelum maupun sesudah eksekusi target sekaligus dalam satu class saja? ada!

Around Advice

Around advice memungkinkan kita mendefinisikan advice sebelum dan/atau sesudah disaat yang bersamaan dalam satu class saja. Tetapi untuk menggunakan fitur tersebut dibutuhkan tambahan library external yaitu aopaliance.

<dependencies>
    <dependency>
        <groupId>aopalliance</groupId>
        <artifactId>aopalliance</artifactId>
        <version>1.0</version>
    </dependency>
    ...
</dependencies>

Dengan menggunakan library ini kita bisa menggunakan interface MethodInterceptor untuk menyisipkan aspect pada target.

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class MonitoringAdvice implements MethodInterceptor {

    @Override
    public Object invoke(MethodInvocation targetMethod) throws Throwable {

        long startTime = System.currentTimeMillis();
        System.out.println("Counting time..");

        Object result = targetMethod.proceed();

        long endTime = System.currentTimeMillis();
        System.out.println("Total time taken in ms : "+(endTime-startTime));

        return result;
    }

}

Dari program diatas, target akan dieksekusi ketika targetMethod.proceed() dipanggil. Dari situ kita bisa dengan mudah menyisipkan advice sebelum dan sesudah eksekusi target.

Untuk kode program lengkap dari contoh diatas dapat diakses disini.

Ref: