Geeky Academy — ตอนที่ 3 Spring Framework Spring AOP

Crosscutting Concern

  • คือ code ส่วนที่ซ้ำๆกันในแต่ละคลาสในแนวขวาง

  • แนวขวางคืออะไร? ปกติถ้า code มันซ้ำซ้อนและเป็น class ชนิดเดียวกันเราก็รวบมันเป็น class แม่แล้ว extends ซะ(extends ต่อๆกันเป็นแนวตั้ง) แต่ถ้ามันคนละชนิดล่ะ extends ก็ไม่ได้ AOP มาเสริมนะจุดนี้

  • ตัวอย่าง case ที่ยกมาว่าใช้ AOP ไม่เกี่ยวกับ biz logic เช่น log, security, transaction

  • AOP จะช่วยยก code ส่วนนี้แยกออกมาโดยไม่กระทบกับ biz class

AOP Terminology

  • Advice — code ที่แยกออกมา impl เช่น พ่น log, begin trans etc.

  • Pointcut — เป็นการระบุ "query" ที่อยากเอา code ที่ซ้ำออกเช่น execution (* geeky.service.*.*(..)) ทุก method ของ class ใน package geeky.aop ที่ลงท้ายด้วย Service ต้องไปทำงานที่ Advice ก่อนเป็นต้น

  • Joinpoint — "รายชื่อ method" ที่ list ออกมาจากการ "query" ตามที่กำหนดไว้ที่

  • PointcutAspect — ตัว wrap Advice กับ Pointcut

  • Target object — Biz logic code

  • AOP Proxy — ตัว wrap Aspect เข้ากับ Target object

  • AOP Weaving — ไม่มีอะไรแค่การปั้น AOP Proxy ณ runtime เท่านั้น

Spring AOP คือ Impl AOP ในแบบของ Spring โดยมีข้อกำหนดเฉพาะตัวบางอย่างเช่น

  • support แต่ joinpoints ระดับ method

  • weaving ณ runtime เท่านั้น (มัน weaving ตอนอื่นได้ด้วยเหรอ ?)

  • Config Aspect ด้วย XML หรือ Annotation

ดังนั้นเบื้องหลังจริงๆคือ

  • เวลา caller เรียก method

  • เช็คว่าเข้าเงื่อนไขของ Pointcut หรือเปล่า

  • ถ้าเข้าก็ Weaving เพื่อสร้าง AOP Proxy

  • ถ้ากำหนด Before ทำงานส่วนที่ impl Before บน Advice

  • ทำงานส่วนของ Target object

  • กำหนด After ทำงานส่วนที่ impl After บน Advice

  • กำหนด After Returning ทำงานส่วนที่ impl After Returning บน Advice

  • ถ้า method throw exception และกำหนด After Throwing ทำงานส่วนที่ impl After Throwing บน Advice

  • ในกรณีกำหนดเป็น Around ต้องสร้าง method ที่ pass ProceedingJoinpoint เข้ามา run .proceed() และ return result obj ออกไปด้วย

อันต่อไป Vagrant, SpringMVC, Redis และ RabbitMQ ‪#‎เฮือก‬

Slide

Spring Framework AOP@9Tae

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s