- 透過pointcut選擇join points
- advice及pointcut是aspect的最基本元素
- 在Spring AOP中,要使用AspectJ的pointcut expression language定義pointcut
- Spring僅支援AspectJ pointcut designator的子集,如下
- arg()
- @args()
- execution()
- this()
- target
- @target()
- within()
- @within()
- @annotation
- Writing pointcuts
- 先設定一個Performance interface,代表任何類型的表演
- 如果想要編寫Performance的Perform()觸發的advice,使用AspectJ aspect expression()選擇Performance的perform()
execution(* concert.Performance.perform(..))
- execution: method執行後觸發
- *: return任意type,表示不在意method return type
- concert.Performance: method所屬的class
- perform: method
- (..): 任意arguments,表示pointcut選擇任意的perform(),無論這個method的arguments是什麼
- * concert.Performance.perform(..): 指定的method
- 假設現在要配置的pointcut僅能事concert pacakge,則可以使用within()
execution(* concert.Performance.perform(..)) && within(concert.*)
- 除了&&也可以使用||,!表示not
- &在XML中有特殊含義,在Spring內描述pointcut可以使用and, or, not
- 在pointcut選擇beans
- bean(): 使用bean的ID標示bean
- 以下範例比表示,執行Performance的perform()時使用advice,但只限定bean的ID為woodstock
execution(* concert.Performance.perform(..)) and bean('woodstock')
- 也可以不允許ID為woodstock的bean:
execution(* concert.Performance.perform(..)) and !bean('woodstock')
package concert; public interface Performance { public void perform(); }
沒有留言:
張貼留言