..


ลิงก์ผู้สนับสนุน

AOP -- การจัดมุมมองการสร้าง

ตอนนี้ขอดูวิธีการสร้างลักษณะ
ก่อนอื่นเราสร้างอินเตอร์เฟซที่ตัวอย่างที่เราจะเขียน pointcuts ของเรา :






 อินเตอร์เฟซที่สาธารณะ MyInterface {





  



 F1 ประชาชนเป็นโมฆะ ();





  



 public int f2 ();





  



 public int f3 () พ่นยกเว้น;





  



 F4 void (มหาชน) พ่นยกเว้น;





  



 F5 int (มหาชน);







 }



pointcut ในการเขียนต้องรู้ designators AspectJ pointcut ในตัวอย่างที่เราจะใช้ดำเนินการเฉพาะที่ตรงกับวิธีการดำเนินการจุดร่วม
รูปแบบของการดำเนินการคือการแสดงออกของประเภทนี้ :
 



 ปฏิบัติการ (การปรับเปลี่ยนรูปแบบ? ประกาศ ret - ชนิดรูปแบบประเภทของรูปแบบ? ชื่อรูปแบบ (พระรามรูปแบบ) พ่นรูปแบบ?)

 
ที่ :
  • ปรับเปลี่ยนรูปแบบ : พารามิเตอร์โดยใช้การปรับปรุงตัวบ่งชี้ว่าชนิดของวิธีการที่ * มูลค่าที่ตรงกับทุกประเภทของการปรับเปลี่ยน
  • ret ประเภทรูปแบบ : มันบ่งชี้ว่าชนิดการกลับมาของวิธีการ * มูลค่าที่ตรงกับทุกประเภทของผลตอบแทน
  • ประกาศประเภทรูปแบบ : พารามิเตอร์ตัวเลือกในชั้นเรียนที่ประกาศวิธีการที่บ่งชี้ว่า * ค่าจะใช้เป็นบัตรเสริมเพื่อแทนที่ทั้งชื่อชั้นหรือส่วนหนึ่งของมัน
  • ชื่อรูปแบบ : ชื่อของวิธีการที่ * ค่าจะใช้เป็นบัตรเสริมเพื่อแทนที่ทั้งชื่อของวิธีการหรือเป็นส่วนหนึ่งของมัน
  • พระรามรูปแบบ : ระบุค่าพารามิเตอร์ที่วิธีการที่ ค่า () บ่งชี้ว่าวิธีการที่จะไม่มีพารามิเตอร์ในขณะที่มูลค่า (.. ) ที่บ่งชี้วิธีการที่ยอมรับเป็นศูนย์หรือมากกว่าพารามิเตอร์ * ค่าจะใช้เป็นบัตรเสริมเพื่อแทนที่พารามิเตอร์ชนิดของวิธีการเช่น (*, java.lang.String) ตรงกับวิธีการที่จะเป็นอินพุทพารามิเตอร์ที่สองในครั้งแรกของประเภทใดประเภทที่สอง เชือก
  • พ่นรูปแบบ : พารามิเตอร์ตัวบ่งชี้ว่าชนิดของการยกเว้นโยนโดยวิธีการเช่นพ่น java.lang.Exception
เพื่อทำความเข้าใจไวยากรณ์เราเริ่มต้นด้วยตัวอย่าง

ครั้งแรกที่เราต้องสร้างมุมมองของเราเอง :






 มุมมอง @







 {สาธารณะ MyAspect ชั้น



  



 .............







 }



ที่เราเห็นชั้นเป็นบันทึกย่อด้วยการจัดมุมมอง @ นี้จะไม่เพียงพอเพราะคุณต้องเปิดการใช้งานการสนับสนุนสำหรับ AOP nell'applicationContext XML. :





 <--! ENBLING AspectJ -->







 <aop:aspectj-autoproxy />









 <--! MYASPECT -->







 <bean id="myAspect" class="it.mrwebmaster.aop.MyAspect" />



เมื่อคุณได้ทำทั้งสองนี้การดำเนินงานพร้อมที่จะสร้างคำแนะนำตัวอย่างเช่นการดำเนินการก่อนการดำเนินการของวิธีการที่ F1 (ก่อนที่จะแนะนำ) :






 @ ก่อนหน้า (การดำเนินการ"(* it.mrwebmaster.aop.MyInterface.f1 (..))")







 beforeF1 ประชาชนเป็นโมฆะ () {



  



 System.out.println ("ก่อนที่จะ F1");







 }



ที่สามารถเห็นได้จากรหัสที่เราใช้ @ ก่อนที่จะบันทึกย่อที่รับนิพจน์เป็นค่าที่ระบุเป็น pointcut ในตัวอย่างของเรา, การแสดงออกที่ตรงกับวิธีการทั้งหมดที่เรียกว่าอินเตอร์เฟซ it.mrwebmaster.aop.MyInterface F1 indipendetemente โดยการปรับเปลี่ยนของพวกเขากลับพารามิเตอร์ชนิดและนำเข้า
ในทำนองเดียวกันเราสามารถใช้คำแนะนำที่รันเมื่อวิธีการที่จะทํางานเสร็จ (หลังจากกลับมาแนะนำ) อย่างถูกต้องใช้บันทึกย่อ @ AfterReturning ของตน :






 @ AfterReturning pointcut (="ปฏิบัติการ (* it.mrwebmaster.aop.MyInterface.f2 (..))", กลับ ="retval")







 afterReturningF2 โมฆะสาธารณะ (วัตถุ retval) {



  



 System.out.println ("กลับ F2"+ r​​etval);







 }



บันทึกนี้จะใช้เวลาพารามิเตอร์ต่อไปนี้นอกเหนือไปจาก pointcuts, ชื่อที่กำหนดให้วัตถุที่ส่งกลับโดยวิธีการที่จะได้รับเป็นพารามิเตอร์การป้อนข้อมูลของ Advaita ในกรณีนี้การแสดงออกของ pointcut เป็น inviarata ยกเว้นสำหรับชื่อของวิธีการซึ่งในกรณีนี้, F2
คล้ายกันมากคำแนะนำที่ถูกดำเนินการเมื่อวิธีการพ่นยกเว้น (หลังจากการขว้างปาแนะนำ) ใช้บันทึกย่อ @ AfterThrowing คือ :





 @ AfterThrowing pointcut (="ปฏิบัติการ (* it.mrwebmaster.aop.MyInterface.f3 (..))", ขว้างปา ="throwable")







 เป็นโมฆะ afterThrowingF3 สาธารณะ (Throwable throwable) {

 

  



 System.out.println ("F3 พ่น"+ throwable);







 }



ความแตกต่างคือว่าวิธีการที่ไม่ส่งคืนวัตถุ แต่ข้อยกเว้น

ประเภทของการแนะนำก็คือการดำเนินการหลังจากที่เสมอวิธีการเป็นเวลาปกติหรือพ่นยกเว้น (หลังจากที่แนะนำ) แนะนำนี้จะดำเนินการผ่านการใช้ @ หลังจากที่ :






 @ หลังจากที่ ("การดำเนินการ (* it.mrwebmaster.aop.MyInterface.f4 (..))")







 afterF4 ประชาชนเป็นโมฆะ () {



  



 System.out.println ("หลังจาก F4");







 }



สุดท้ายเราดูวิธีการทำ'รอบคำแนะนำ :






 @ รอบ (การดำเนินการ"(* it.mrwebmaster.aop.MyInterface.f5 (..))")







 เป็นโมฆะ aroundF5 สาธารณะ (ProceedingJoinPoint PJP) {



  



 System.out.println ("ก่อนที่จะ F5");



  



 try {



    



 วัตถุ retval = pjp.proceed ();



    



 System.out.println ("F5 กลับ"+ retval);



  



 } catch (Throwable e) {



    



 System.out.println ("F5 พ่น"+ E);



  



 }







 }



ที่เราสามารถดูจากรหัสของการแสดงออกของ pointcut จะไม่แตกต่างจากคำแนะนำอื่น ๆ การเปลี่ยนแปลงอะไรที่เป็นคำแนะนำที่เดียวกันกับที่จะต้องเรียกใช้การดำเนินการของวิธีการที่ผ่านวิธีการของคลาส ProceedingJoinPoint ดำเนินการอย่างใดอย่างหนึ่งที่มีโปรแกรมที่จะถูกส่งเป็นสัญญาณ อินเตอร์เฟซนี้จะให้นอกจากนี้ยังใช้วิธีการอื่น ๆ ดำเนินการต่อเพื่อดึงข้อมูลเกี่ยวกับพารามิเตอร์วิธีการพิมพ์กลับและวัตถุที่เป็นวิธีการดำเนินการ มันเป็นทางด้านซ้ายเพื่อผู้อ่านใด ๆ ที่ลึกกว่า

เพื่อทดสอบคำแนะนำของเราเราสามารถทำคือการเขียนการดำเนินงานที่น่ารำคาญของ MyInterface อินเตอร์เฟซและสร้างการทดสอบหลัก :






 MyInterfaceImpl {class สาธารณะดำเนินการ MyInterface





  



 @ Override



  



 F1 ประชาชนเป็นโมฆะ () {



    



 System.out.println ("F1");



  



 }





  



 @ Override



  



 public int f2 () {



    



 System.out.println ("F2");



    



 return 0;



  



 }





  



 @ Override



  



 public int f3 () {พ่นยกเว้น



    



 System.out.println ("F3");



    



 โยน Exception ใหม่ ("ข้อยกเว้น F3");



  



 }





  



 @ Override



  



 F4 void (มหาชน) พ่นยกเว้น {



    



 System.out.println ("F4");



  



 }





  



 @ Override



  



 F5 int (มหาชน) {



    



 System.out.println ("F5");



    



 return 0;



  



 }







 }



. nell'applicationContext XML :





 <--! เป้าหมาย : วัตถุ -->







 <bean id="myInterfaceImpl" class="it.mrwebmaster.aop.MyInterfaceImpl" />



การทดสอบหลัก :





 สาธารณะระดับหลัก {





  



 ประชาชนเป็นโมฆะคง main (String args []) {





    



 / **



     



 * Instanz ภาชนะ IoC



     



 * /



    



 ApplicationContext ApplicationContext ClassPathXmlApplicationContext = ใหม่ ("applicationContext.xml");





    



 MyInterface MyInterface = (MyInterface) applicationContext.getBean ("myInterfaceImpl");





    



 myInterface.f1 ();



    



 System.out.println ("########## \ n");





    



 myInterface.f2 ();



    



 System.out.println ("########## \ n");





    



 try {



      



 myInterface.f3 ();



    



 } catch (Exception e) {}



    



 System.out.println ("########## \ n");





    



 try {



      



 myInterface.f4 ();



    



 } catch (Exception e) {}



    



 System.out.println ("########## \ n");





    



 myInterface.f5 ();



    



 System.out.println ("########## \ n");



  



 }







 }



แผนที่สปริง Java
E - Learning
ลินุกซ์ (หลักสูตร) ลินุกซ์ (หลักสูตร)
คู่มือที่สมบูรณ์ในระบบเปิดแหล่งที่มา จาก 49 €
PHP (หลักสูตร) PHP (หลักสูตร)
หลักสูตรเต็มสำหรับการสร้างเว็บไซต์แบบไดนามิก จาก 49 €
Ruby และ Ruby on Rails (หลักสูตร) Ruby และ Ruby on Rails (หลักสูตร)
สร้างโปรแกรมซอฟต์แวร์และเว็บด้วยทับทิมและ ร. จาก 39 €
ลิงก์ผู้สนับสนุน