ก่อนอื่นเลยก็ต้องให้ดู หน้าตาของ โค๊ดเดิมจากตอนที่แล้วนะครับ
และผลการ run โปรแกรมจะไดดังนี้ครับ
จะเห็นว่าผมให้ตัวอย่างความสนใจที่ method B และเราจะมาเพิ่มการกระทำของโปรแกรมกันนะครับ
โดยจะพูดถึงการระบุจุดตัดก่อนนะครับ ให้เราทำการสร้าง ไฟล์ Aspect ขึ้นมาครับ
จะได้ออกมาหน้าตาประมาณนี้ครับ
AccessLvPointcut pointcut PointcutName(arg) [call/execution] (AccessLvMethod returntype methodName)
บางคนอาจงง งั้นผมจะอธิบายเพิ่มนะครับ
- AccessLv คือ พวก public private protected
- PointcutName ให้เราตั้งชื่อตามที่เราต้องการครับ ซึ่งเราจะนำชื่อนี้ไปใช้ในการระบุ ก่อนหน้า ระหว่างและหลังจาก ส่วน (arg) เนี้ยจะใช้กับกรณีที่มีการคืนค่าของการระบุจุดตัดครับ
- call / execution อันนี้ให้เลือกอย่างใดอย่างหนึ่งครับ ซึ่งผมได้อธิบายให้ part แรกไปแล้ว
- returntype อันนี้เป็น ชนิดการคืนค่าของเมท็อดครับ
- methodName ก็เป็นชื่อเมท็อดที่เราจะระบุจุดตัดนั้ันเอง
เรามาดูตัวอย่างนะครับ
จะเห็นว่า ผมใช้
- AccessLvPointcut เป็น public
- PointcutName ผมตั้งให้ชื่อว่า xx และไม่มี arg ตามครับเพราะไม่มีค่าที่ต้องการเก็บนั้ันเอง
- ผมเลือกใช้ call เพราะผมสนใจการเรียกใช้เมท็อด B ครับ
- public void b(..) เนี้ยเอาง่ายๆเลยครับ ก็ล้อตาม การสร้างเมท็อดเลยครับ แต่ไม่ต้องใส่ static ก็ได้นะ
ส่วน (..) เนี้ยเป็นเรื่องในระดับสูงขึ้นนิดนึงแล้วครับ ซึ่งผมจะมี part ของระดับที่สูงขึ้นมาอธิบายต่อไปครับ
- && !within( ชื่อไฟล์ AspectJ ) เป็นส่วนระบุพิเศษครับ เพราะบางที่ เราจะสร้างเมท็อดในไฟล์ aspectj หรือ .aj ซึงชื่ออาจไปซ้ำกับเมท็อดที่เรามีอยู่แล้วข้างนอกได้ครับ ซึ่งเท่าที่ผมลองๆมา AspectJ บังคับให้ระบุตัวพิเศษนี้ด้วยครับ ไม่งั้น warning/error
จากนั้ันเรามาลองสร้าง pointcut หรือจุดตัดให้มากขึ้นกันดูครับ
จะเห็นว่าคล้ายๆกันกับ อันแรกครับคือยังสนใจ เมท็อด B เพียงแต่ต้องเปลี่ยนชื่อจุดตัดครับเพราะห้ามซ้ำ และผมสนใจในขั้นตอนการ ประมวลผล ด้วย
จากนั้ันเรามาระบุ ช่วงเวลาที่เราจะแทรกการทำงานกันครับ
ผมทำการระบุก่อนหน้า การเรียกใช้ เมท็อด B และหลังจากเรียกใช้เมท็อด B เสร็จแล้ว
และให้เพิ่มการแสดงผลข้อความเข้าไปด้วย ว่า Before call method B และ After Call method B
จะได้ผลการ run ดังนี้ครับ
ซึ่งแตกต่างจากผลการ run เดิม เพราะเราบอกกับโปรแกรมว่า ในโปรแกรม X เมื่อมีการเรียกใช้ (call) เมท็อด B ทั้งก่อนหน้าและหลังเสร็จ ให้แสดงผลข้อความ ครับ
จากนั้ันเรามาลองแบบเพิ่มเข้าไปดูครับ
จะให้ผลดังนี้ครับ
จะเห็นว่ามีข้อความแสดงออกมาเพิ่มเติมครับ และจะเห็นว่าการประมวลผลอยู่ภายในการเรียกใช้อีกทีนึงทำให้เราสามารถสรุปได้ดังนี้ครับ
ก่อนเรียกใช้เมท็อด -> ก่อนประมวลผลเมท็อด -> หลังประมวลผลเสร็จเมท็อด -> หลังจากเรียกใช้เมท็อด
และทำให้เห็นว่า AOP เนี้ยเข้ามาช่วยเราได้ครับเมื่อเรามีจำนวนเมท็อดที่เยอะมากๆ แต่ไม่อยากเข้าไปยุ่งหรือแก้ไข ไฟล์เดิม เราก็เพียงแค่ชี้จุดที่เราสนใจซะ AOP ก็ช่วยเราได้แล้ว
ครับนี่ก็เป็นขั้นตอนการ Coding AOP แบบง่ายๆนะครับหวังว่าจะพอให้ความรู้แก่ผู้ที่สนใจได้บ้างนะครับ แล้วใน part ถัดไปผมจะเริ่มเพิ่มขั้นการเขียน AOP ให้สูงขึ้นและง่ายขึ้นครับเพื่อให้ AOP ที่เราเขียนนั้ันมีความสามารถมากยิ่งขึ้นและง่ายต่อการพัฒนาโปรแกรมสำหรับ โปรแกรมเมอร์อย่างเราๆ
0 ความคิดเห็น :
แสดงความคิดเห็น