AspectJ nedir? AspectJ’yi anlamak için öncelikle AOP modelini açıklamak lazım. AOP’un kısaltmasıyla başlayalım, Aspect Oriented Programming, Hacettepe Üniversitesi Bilgisayar Mühendisliğindeki arkadaşımız “Cepheye Yönelik Programlama” veya “İlgiye Yönelik Programlama” olarak çevirmiş ama bu anlatımızda kısaca AOP olarak değineceğiz. AOP, uygulamayı nesneler yerine concerns’lere (kesitlere) ayrıştırmaktadır. Java gerçek nesneye yönelik proğramlama dili ve bununla birlikte AOP tekniğini destekleyen en iyi proğramlama dilidir. AspectJ, AOP mantığını taşıyan bir Java gerçekleştirimidir.
Şimdi terimleri açıklayalım
1) Join Points (Birleşim Noktaları)
2) PointCuts (Birleşim Nokta Kümeleri)
3) Advice (Tavsiye Yordam)
AspectJ, join points kavramını aşağıdaki durumların gerçekleşmesi durumunda kullanır.
1 ) Metodu ya da yapılandırıcısını(constructor) çağırdığımız zaman.
2 ) Metodu ya da yapılandırıcısını(constructor) uyguladığımız (execute) zaman.
3 ) Herhangi bir alana (field) erişmek istedigimizde ya da güncellemek istediğimizde
4 ) Sınıfı ya da nesneyi tanımlarken
5 ) Aykırı Durumları (Exception) ele alırken
PointCuts, pointcut anahtar kelimesi ile deklare edilir. Join Points seçmek için kullanır ya da tanımlanmasını sağlar.
[visibility-modifier] pointcut name( ParameterList ) :PointcutExpr ;
Advice, PointCuts ile ilişkilendirilir ve metodu çalıştırmadan önce mi, yoksa sonra mı, kısaca metodun davranışını belirler, pointcuts lar üzerinde ne gibi işlem yapacağımıza burda karar veririz. Advice ile kullanılan terimler before Pointcuts’ın işletimine geçmeden önce ele alınmasını sağlar.after Pointcuts’ın işletimi bittikten sonra ele alınmasını sağlar.
Uygulamamızı bir örnekle açıklayalım.
package helloworld;
public aspect World {
//pointcut greeting() : execution(* Hello.sayHello(..));
//pointcut greeting() : call( * Hello.sayHello(..) );
pointcut greeting() : call( void sayHello(..) );
after() returning() : greeting() {
System.out.println(" World!");
}
before() : greeting(){
System.out.print("Asin Akdeniz...");
}
}
public class Hello {
public static void main(String[] args) {
sayHello();
}
public static void sayHello() {
System.out.print("Hello");
}
}
Burada Word AspectJ sınıfı, Hello nesnesine ait sayHello metodunun davranışına yön verir. Yani sayHello metodu çağrılmadan önce ve sonrasında bir dizi işlem yapılır. Örnekte sadece sayHello metodu çağrılmadan önce ve sonrasında ekrana bir şeyler yazmaktadır. Anlaşılır ve net bir örnek olduğu kanısındayım. Bu kodu eclipse ide’sinde deneyebilirsiniz ama oncelikle bazı plug-in’leri eklemeniz gerekmektedir. http://www.eclipse.org/aspectj/ linkinden gereken plug-in leri indirebilirsiniz.
1 yorum:
Cok bilgilendirici olmus teşekkür ederim
Yorum Gönder