前言:
这个问题,同事问我,我竟然说不清楚。
知道了spring AOP用的是代理,知道用JDK和Cglib
但是定义注解的时候,哪里用到了代理呢?
那么看一下@Pointcut
1. pointcut的使用方式
精准打击,直接定义Xannotion就是要定义的注解。
@Pointcut("execution(* com.dk.common.annotion.Xannotion)")
表示任意公共的类
@Pointcut("execution(public * *(..))")
在指定包下的所有方法
@Pointcut("execution(* com.dk.*.*(..))")
还有一些其它用法。
2.
Spring中AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也由IOC容器负责管理。
所以基于JDK实现的springAOP的动态代理方式的工作原理为:
接口 + 类 + 切入逻辑 -> 代理类
基于CGLIB实现的springAOP的动态代理方式的工作原理为:
类 + 切入逻辑-> 代理类