..
Şimdi bir yönünü nasıl oluşturulacağını görelim.
Herşeyden önce bizim pointcuts yazmak hangi örnek bir arayüz oluşturmak:
ortak arabirim Arayüzüm {
public void f1 ();
public int f2 ();
public int f3 () İstisna atar;
public void f4 () İstisna atar;
public int f5 ();
}
Bir pointcut yazmak için bilmeniz gerekir AspectJ pointcut belirleme , örneklerimizde biz katılmak nokta yürütme yöntemleri sonuç sadece yürütme kullanır.
yürütme (modifiye model? ret-tip-model tipi model? isim desen (param model) atar model bildirme?)burada:
Öncelikle kendi boy oluşturmanız gerekir:
@ Boy
{Public class MyAspect
.............
}
Görüldüğü gibi sınıf @ boy ile açıklamalı bir.
. Eğer AOP nell'applicationContext Xml desteğini etkinleştirmek zorunda çünkü bu yeterli değildir:
<- ENBLING AspectJ -> <aop:aspectj-autoproxy /> <- MYASPECT -> <bean id="myAspect" class="it.mrwebmaster.aop.MyAspect" />
Bir kez yöntem f1 (tavsiye) önce icra önce gerçekleştirilen bir eylem, örneğin, bu iki işlem bir tavsiye oluşturmaya hazırsınız yaptık:
@ Önce ("yürütme (* it.mrwebmaster.aop.MyInterface.f1 (..))")
public void beforeF1 () {
System.out.println ("F1 ÖNCESİ");
}
Kodundan görüldüğü gibi bir pointcut tanımlayan bir değer olarak bir ifade kabul açıklama önce @ kullandı.
Örneğimizde, ifade onların değiştirici, dönüş türü ve giriş parametreleri tarafından arayüzü it.mrwebmaster.aop.MyInterface f1 indipendetemente denir tüm yöntemleri eşleşir.
Benzer bir yöntem doğru açıklama @ AfterReturning kullanarak yürütme (tavsiye döndükten sonra) tamamlandığında yürüten bir danışma kullanabilirsiniz:
@ (Pointcut AfterReturning = "yürütme (* it.mrwebmaster.aop.MyInterface.f2 (..))", dönen =" retVal ")
public void afterReturningF2 (Object retVal) {
System.out.println ("İADE F2" + retVal);
}
Bu kayıt pointcuts ek olarak, nesneye verilen isim Advaita bir giriş parametresi olarak verilebilir yöntemi tarafından döndürülen, aşağıdaki parametreleri alır.
Bu durumda pointcut ifadesi bu durumda, f2 yöntemi, adını dışında inviarata olduğunu.
@ (Pointcut AfterThrowing = "yürütme (* it.mrwebmaster.aop.MyInterface.f3 (..))", atma =" Throwable ")
public void afterThrowingF3 (Throwable Throwable) {
System.out.println (+ Throwable "F3 atıyor");
}
Fark yöntem bir nesne değil, bir istisna geri olmamasıdır.
Tavsiye, başka tür her zaman bir yöntem sonra çalıştırılır, o zaman normal ya da bir istisna (tavsiye sonra) atar. Bu tavsiye sonra @ kullanılarak uygulanır:
@ ("Yürütme (* it.mrwebmaster.aop.MyInterface.f4 (..))") sonra
public void afterF4 () {
System.out.println ("SONRA F4");
}
Son olarak tavsiye çevresinde 'nasıl bakın:
@ Çevresi ("yürütme (* it.mrwebmaster.aop.MyInterface.f5 (..))")
public void aroundF5 (ProceedingJoinPoint PJP) {
System.out.println ("F5 ÖNCESİ");
try {
Nesne retVal =) (pjp.proceed;
System.out.println ("İADE F5" + retVal);
} Yakalama (Throwable e) {
System.out.println ("F5 atar" + e);
}
}
Biz pointcut ifade kodunu da görüldüğü gibi diğer tavsiyeleri farklı değildir.
Ne gibi değişiklikler açıkça sınıf ProceedingJoinPoint devam, Başvurusu girdi olarak geçirilen biri yöntemi ile yöntemin yürütme çağırmanız gerekir aynı tavsiyedir.
Bu arayüz yöntem parametreleri, dönüş tipi ve yöntemi çalıştırılır olduğu nesne hakkında bilgi almak için devam diğer yöntemleri kullanır de sağlar.
Herhangi bir derin okuyucuya bırakılmıştır.
Yapabileceğimiz bizim tavsiyeleri test etmek için interface Arayüzüm ve önemsiz bir uygulama yazmak ve bir ana test yaratmaktır:
MyInterfaceImpl {public class implements
@ Override
public void f1 () {
System.out.println ("F1");
}
@ Override
public int f2 () {
System.out.println ("F2");
0 dönmek;
}
@ Override
public int f3 () İstisna atar {
System.out.println ("F3");
new Exception ("İstisna F3") atmak;
}
@ Override
public void f4 () {durum atar
System.out.println ("F4");
}
@ Override
public int f5 () {
System.out.println ("F5");
0 dönmek;
}
}
. nell'applicationContext xml:
<- Hedef: Object -> <bean id="myInterfaceImpl" class="it.mrwebmaster.aop.MyInterfaceImpl" />Ana test:
public class Ana {
public static void main (String [] args) {
/ **
* Instanz IoC konteyner
* /
ApplicationContext ApplicationContext ClassPathXmlApplicationContext = new ("applicationContext.xml");
Arayüzüm Arayüzüm = (Arayüzüm) applicationContext.getBean ("myInterfaceImpl");
myInterface.f1 ();
System.out.println ("########## \ n ");
myInterface.f2 ();
System.out.println ("########## \ n ");
try {
myInterface.f3 ();
} Yakalama (Exception e) {}
System.out.println ("########## \ n ");
try {
myInterface.f4 ();
} Yakalama (Exception e) {}
System.out.println ("########## \ n ");
myInterface.f5 ();
System.out.println ("########## \ n ");
}
}
| |
Linux (Ders)
Açık kaynak sistemi komple rehberi. 49 € düşük. |
| |
PHP (Ders)
Dinamik Web siteleri oluşturmak için tam ders. 49 € düşük. |
| |
Ruby on Rails ve Ruby (Ders)
Ruby ve RoR ile yazılım ve Web uygulamaları oluşturun. En düşük € 39. |