== which designator matched which join point ==

Five methods are called once each: OrderService.place, OrderService.cancel,
InventoryService.reserve, InventoryService.finalCheck and
DefaultOrderService.interfaceless.

  orderService proxy kind : CGLIB subclass
  proxy is an instance of DefaultOrderService : True

  args (bound: SKU-1/2)            -> DefaultOrderService.place(..)
  bean(*OrderService)              -> DefaultOrderService.place(..), DefaultOrderService.cancel(..), DefaultOrderService.interfaceless(..)
  @within(Audited)                 -> DefaultOrderService.place(..)
  execution (full signature)       -> DefaultOrderService.place(..)
  @annotation(Marker)              -> DefaultOrderService.place(..)
  target(DefaultOrderService)      -> DefaultOrderService.place(..), DefaultOrderService.cancel(..), DefaultOrderService.interfaceless(..)
  this(OrderService)               -> DefaultOrderService.place(..), DefaultOrderService.cancel(..), DefaultOrderService.interfaceless(..)
  execution (wildcards)            -> DefaultOrderService.cancel(..)
  @target(Audited)                 -> DefaultOrderService.cancel(..)
  bean(inventoryService)           -> InventoryService.reserve(..)
  within                           -> InventoryService.reserve(..)
  @args(Trackable)                 -> DefaultOrderService.interfaceless(..)

== what the parser accepts and refuses ==

  supported (all parsed and evaluated):
    execution(* com.ankurm.aop.service.OrderService.place(..)) OK
    within(com.ankurm.aop.service..*)                    OK
    this(com.ankurm.aop.service.OrderService)            OK
    target(com.ankurm.aop.service.DefaultOrderService)   OK
    args(String, int)                                    OK
    @target(com.ankurm.aop.service.Audited)              OK
    @args(com.ankurm.aop.service.Trackable)              OK
    @within(com.ankurm.aop.service.Audited)              OK
    @annotation(com.ankurm.aop.service.Marker)           OK
    bean(defaultOrderService)                            OK

  unsupported in Spring AOP:
    call(* com.ankurm.aop.service.OrderService.place(.   rejected
    get(* com.ankurm.aop.service.*.*)                    rejected
    set(* com.ankurm.aop.service.*.*)                    rejected
    initialization(com.ankurm.aop.service.*.new(..))     rejected
    staticinitialization(com.ankurm.aop.service.*)       rejected
    preinitialization(com.ankurm.aop.service.*.new(..)   rejected
    handler(java.lang.Exception)                         rejected
    adviceexecution()                                    rejected
    withincode(* com.ankurm.aop.service.*.*(..))         rejected
    cflow(execution(* com.ankurm.aop.service.*.*(..)))   rejected
    cflowbelow(execution(* com.ankurm.aop.service.*.*(   rejected
    if()                                                 rejected
    @this(com.ankurm.aop.service.Audited)                rejected
    @withincode(com.ankurm.aop.service.Marker)           rejected

  the exception, in full:
    org.aspectj.weaver.tools.UnsupportedPointcutPrimitiveException
    Pointcut expression 'call(* com.ankurm.aop.service.OrderService.place(..))' contains unsupported pointcut primitive 'call'

The reference documentation says these produce an IllegalArgumentException. They do
not: UnsupportedPointcutPrimitiveException extends RuntimeException directly, so a
catch of IllegalArgumentException will not catch it.
