2017年12月24日 星期日

Java Spring - 透過pointcut選擇join points


  • 透過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,代表任何類型的表演
    • package concert;
      public interface Performance {
        public void perform();
      }
      
    • 如果想要編寫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')


    沒有留言:

    張貼留言