Aspect Oriented Programming Java Example(AspectJ)
Ocak 7, 2011 | Comments | AOP(Aspect Oriented Programming-AspectJ)
AOP(Aspect-oriented programming) burada Eclipse’ye nasıl kurulduğunu ve basit bir örnek ile açıklayacağım. Kısaca Java için yazılan AspectJ nasıl kullanabileceğimizi görecez. AOP OOP(Object-oriented programming) nin yerini almak için geliştirilmemiş. Tam tersi OOP’nin yeniden kullanım problemini çözmesini ve programların daha kolay bakım yapılabilmesini sağlamak için geliştirilmiş. Detaylı bilgi ve özellikle aspect kavramı için referans olarak kullandığım çok güzel Türkçe(arkadaşımın derste yaptığı sunum) kaynağı eburhan.com linkinden indirebilirsiniz.
Eclipse Helios‘u açıp Help–>Eclipse Marketplace‘yi seçin ve gelen ekrana next buttonu tıklayın.


Find–>aspectj arayıp install buttonu tıklayarak kurun.

File–>New–>Other–>AspectJ–>Aspect Project bir proje oluşturun.

Aspectj projesi oluşturunca zaten kendisi aspectjrt.jar dosyasını ekliyor.

Paketimizi sağ tıklayıp new–>other–>Aspect –>Nextten aynı java classları oluşturduğumuz gibi bunu da oluşturuyoruz.
Bu classların uzantıları .aj dir.
AspectjSinifi.aj
package ethemsulan;
public aspect AspectjSinifi {
// Test.java sinifinda int tipinde ve degerDonder isminde metod
//iki arguman aliyor. ethemsulan paketinin altindaki Test sinifinda
//herhangi bir isim AspectjKul ismini verdim ve bunu after ve beforeda da ayni isim olmali
pointcut AspectjKul(int a, int b) :
execution(int degerDonder(..)) && args(a, b) && within(ethemsulan.Test);
//metod cgrilimindan once Test.java icindeki main de girilen degerleri consola yazdim
before(int a, int b) : AspectjKul(a, b) {
System.out.println(a + " degeri girildi");
System.out.println(b + " degeri girildi");
}
//metod cagrilimindan sonra da girilen degerlerin toplamini cosnola yazdim
after(int a, int b) returning() : AspectjKul(a,b) {
System.out.println("Girilen degerin toplami: "+(a+b));
};
}
Test.java
package ethemsulan;
public class Test {
public int degerDonder(int a, int b)
{
return a+b;
}
public static void main(String[] args) {
//Bu class calistirildiginda runtimda aspect consola after ve befor kisminda
//tanimlanan islemleri(biz degeleri consola yazdirdik) yapar
Test test=new Test();
test.degerDonder(5, 3);
}
}
Test.java sinifini sağ tıklayıp Run As–>AspectJ/Java Application ile calistiryoruz.
Dikkat mainin içinde nesne üretip sadece degerDonder() metodunu çağırıyoruz. Yani consola herhangi bir değer yazmiyoruz. Aşağıdaki çıktı da göründüğü gibi consola aspect çalışarak değer yazıyor.

