== Spring Boot default: spring.aop.proxy-target-class=true ==
$ java -jar target/spring-aop-demo-1.0.0.jar

  defaultOrderService    CGLIB subclass     target=DefaultOrderService
      class      : DefaultOrderService$$SpringCGLIB$$0
      interfaces : (none)
      advisors   : 11
  inventoryService       CGLIB subclass     target=InventoryService
      class      : InventoryService$$SpringCGLIB$$0
      interfaces : (none)
      advisors   : 6
  selfInvokingService    CGLIB subclass     target=SelfInvokingService
      class      : SelfInvokingService$$SpringCGLIB$$0
      interfaces : (none)
      advisors   : 2

  proxy is an instance of DefaultOrderService : True
    this(OrderService)             -> DefaultOrderService.place(..), DefaultOrderService.cancel(..), DefaultOrderService.interfaceless(..)
    target(DefaultOrderService)    -> DefaultOrderService.place(..), DefaultOrderService.cancel(..), DefaultOrderService.interfaceless(..)
    bean(*OrderService)            -> DefaultOrderService.place(..), DefaultOrderService.cancel(..), DefaultOrderService.interfaceless(..)

== framework default restored: spring.aop.proxy-target-class=false ==
$ java -jar target/spring-aop-demo-1.0.0.jar --spring.aop.proxy-target-class=false

  defaultOrderService    JDK dynamic proxy  target=DefaultOrderService
      class      : $Proxy62
      interfaces : OrderService
      advisors   : 11
  inventoryService       CGLIB subclass     target=InventoryService
      class      : InventoryService$$SpringCGLIB$$0
      interfaces : (none)
      advisors   : 6
  selfInvokingService    CGLIB subclass     target=SelfInvokingService
      class      : SelfInvokingService$$SpringCGLIB$$0
      interfaces : (none)
      advisors   : 2

  proxy is an instance of DefaultOrderService : False
    this(OrderService)             -> OrderService.place(..), OrderService.cancel(..)
    target(DefaultOrderService)    -> OrderService.place(..), OrderService.cancel(..)
    bean(*OrderService)            -> OrderService.place(..), OrderService.cancel(..)

Same aspects, same beans, different proxy strategy:

 - With CGLIB the proxy is a SUBCLASS of DefaultOrderService, so it is an instance of
   the implementation class and methods that are not on the interface are advised.
 - With a JDK proxy the proxy implements OrderService only. It is NOT an instance of
   DefaultOrderService, casting to that class throws ClassCastException, and any
   method absent from the interface is invisible to advice.

This is why this() and target() differ. this() tests the proxy; target() tests the
object behind it. Under CGLIB they usually agree, which is exactly why the
distinction only bites after somebody switches the proxy type.
