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: