วิธีสร้างลักษณะของอินเทอร์เฟซที่ขยายมาจาก A Super Interface

ฉันมีอินเทอร์เฟซระดับบริการที่ขยายจากอินเทอร์เฟซพื้นฐาน ฉันต้องการสร้าง Pointcut รอบอินเทอร์เฟซระดับบริการของฉัน แต่ใช้วิธีใดวิธีหนึ่งที่กำหนดไว้ในอินเทอร์เฟซพื้นฐาน

ตัวอย่างเช่น.... ฉันมีเมธอดในอินเทอร์เฟซพื้นฐานที่เรียกว่า "save()" ฉันใส่มันไว้ในอินเทอร์เฟซพื้นฐานเนื่องจากอินเทอร์เฟซ "ลูก" ทั้งหมดของฉันจะมีฟังก์ชัน "บันทึก"

ฉันต้องการสร้าง PointCut บนอินเทอร์เฟซ "ลูก" เพียงอินเทอร์เฟซเดียวของฉันสำหรับเวลาที่ "บันทึก" ของฉันถูกเรียก

ฉันสร้างพอยต์คัทดังนี้:

@Pointcut("execution(* com.xyz.someapp.ChildServiceInterface.save(..))")  
public void childServiceSavePointCut();

จากนั้นฉันก็สร้างคำแนะนำ @Around เกี่ยวกับ pointcut ข้างต้นดังต่อไปนี้:

@Around("childServiceSavePointCut()")
public void doMyAdvice()....

โดยที่ "ChildServiceInterface" ขยายอินเทอร์เฟซอื่นซึ่งมีการกำหนดวิธีการ "save()"

คำแนะนำของฉันไม่เคยทำงาน... ฉันแก้ไขโค้ดของฉันแล้วและไม่เห็นคำแนะนำของฉันในรายการที่ปรึกษาสำหรับบริการเป้าหมายของฉัน

ฉันคิดผิดไปจากเดิมหรือเปล่าว่าสิ่งนี้จะได้ผลหรือฉันกำลังใช้งานไม่ถูกต้อง


person El Guapo    schedule 10.02.2011    source แหล่งที่มา


คำตอบ (2)


ลองใช้พอยต์คัตนี้แทน

within(com.xyz.someapp.ChildServiceInterface+) && execution(* save(..))

+ ระบุ รูปแบบประเภทย่อย

person OrangeDog    schedule 10.02.2011

หรือคุณสามารถใส่ pointcut ลงบนวิธีการทั้งหมดของคลาสนั้นได้

@Pointcut("execution(* com.xyz.someapp.ChildServiceInterface.*(..))")  
public void childServiceSavePointCut();

* ระบุประเภทวิธีการทั้งหมด

person pokemon blue    schedule 02.07.2017