..


Sponsor Bağlantılar

AOP - Boy oluşturun

Ş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 biçimi tür bir ifadesidir:
 



 yürütme (modifiye model? ret-tip-model tipi model? isim desen (param model) atar model bildirme?)

 
burada:
  • değiştiricileri desenli: isteğe bağlı değiştirici uygulayarak parametreleri yöntemi türünü belirtir. Değeri * değiştirici her türlü eşleşir.
  • ret tipi model: bu yöntemin dönüş türünü belirtir. Değeri * dönüş her türlü eşleşir.
  • Bildirilmesi tip-model: seçenek parametre, yöntem beyan sınıfını gösterir. * Değeri tamamen sınıf adı veya bir kısmını değiştirmek için bir joker olarak kullanılır.
  • Adı-desen: yöntemin adı. * Değeri tamamen yöntemi veya bir kısmını adını değiştirmek için bir joker olarak kullanılır.
  • param-desen: yöntem parametreleri gösterir. Değeri (..) sıfır veya daha fazla parametre kabul bir yöntemle süre değeri (), herhangi bir parametre alan bir yöntemi gösterir. * Değeri örneğin bir yöntem türü parametresi (*, java.lang.String) yerine bir joker olarak kullanılan girdi olarak her türlü, ikinci tip ilk iki parametre alan bir yöntem sonuç Dize.
  • atar model: isteğe bağlı parametre yöntemi ile atılan istisna türünü gösterir, örneğin, java.lang.Exception atar
Daha iyi sözdizimini anlamak için, örneklerle başlar.

Ö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.
Çok benzer bir yöntem açıklama @ AfterThrowing kullanarak bir istisna (tavsiye atma sonra) atar yürütülen tavsiyem:





 @ (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 ");



  



 }







 }



Bahar Java Rehberi
E-Öğrenme
Linux (Ders) Linux (Ders)
Açık kaynak sistemi komple rehberi. 49 € düşük.
PHP (Ders) PHP (Ders)
Dinamik Web siteleri oluşturmak için tam ders. 49 € düşük.
Ruby on Rails ve Ruby (Ders) Ruby on Rails ve Ruby (Ders)
Ruby ve RoR ile yazılım ve Web uygulamaları oluşturun. En düşük € 39.
Sponsor Bağlantılar