..
ตอนนี้ขอดูวิธีการสร้างลักษณะ
ก่อนอื่นเราสร้างอินเตอร์เฟซที่ตัวอย่างที่เราจะเขียน pointcuts ของเรา :
อินเตอร์เฟซที่สาธารณะ MyInterface {
F1 ประชาชนเป็นโมฆะ ();
public int f2 ();
public int f3 () พ่นยกเว้น;
F4 void (มหาชน) พ่นยกเว้น;
F5 int (มหาชน);
}
pointcut ในการเขียนต้องรู้ designators AspectJ pointcut ในตัวอย่างที่เราจะใช้ดำเนินการเฉพาะที่ตรงกับวิธีการดำเนินการจุดร่วม
ปฏิบัติการ (การปรับเปลี่ยนรูปแบบ? ประกาศ ret - ชนิดรูปแบบประเภทของรูปแบบ? ชื่อรูปแบบ (พระรามรูปแบบ) พ่นรูปแบบ?)ที่ :
ครั้งแรกที่เราต้องสร้างมุมมองของเราเอง :
มุมมอง @
{สาธารณะ 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"+ retval);
}
บันทึกนี้จะใช้เวลาพารามิเตอร์ต่อไปนี้นอกเหนือไปจาก pointcuts, ชื่อที่กำหนดให้วัตถุที่ส่งกลับโดยวิธีการที่จะได้รับเป็นพารามิเตอร์การป้อนข้อมูลของ Advaita
ในกรณีนี้การแสดงออกของ pointcut เป็น inviarata ยกเว้นสำหรับชื่อของวิธีการซึ่งในกรณีนี้, F2
@ 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");
}
}
| |
ลินุกซ์ (หลักสูตร)
คู่มือที่สมบูรณ์ในระบบเปิดแหล่งที่มา จาก 49 € |
| |
PHP (หลักสูตร)
หลักสูตรเต็มสำหรับการสร้างเว็บไซต์แบบไดนามิก จาก 49 € |
| |
Ruby และ Ruby on Rails (หลักสูตร)
สร้างโปรแกรมซอฟต์แวร์และเว็บด้วยทับทิมและ ร. จาก 39 € |