静态代理
- 代理类和被代理类实现相同的接口
- 代理类代理的类型是确定的,代理的方法是确定的,即接口的类型和方法。所以不同的接口要写各自的代理类,即使代理类的逻辑是一样的
- 如果接口变了,代理类和被代理类都需要同步修改
动态代理
jdk动态代理
- 被代理的对象是Object(所以可以是任意类型的对象),被代理的方法是对象的所有方法
- 如果接口变了,代理类不需要动
- 不同的接口和实现可以使用同一个代理类
- 不能代理没有接口的类
- 关键词:
InvocationHandler
Proxy.newProxyInstance
CGLib动态代理——代理没有接口的类
- CGLib:运行时动态生成字节码
- 关键词:
MethodInterceptor
Enhancer.create
Spring AOP
五种增强
Before Advice 前置增强
关键词:
MethodBeforeAdvice
ProxyFactory
After Advice 后置增强
关键词:
AfterReturningAdvice
ProxyFactory
Around Advice 环绕增强
关键词:
MethodInterceptor
ProxyFactory
Throw Advice 抛出增强
关键词:
ThrowsAdvice
ProxyFactory
Introduction Advice 引入增强
简单地说,在运行时,给类动态添加接口实现的增强
术语介绍
增强
切点:拦截特定方法的匹配条件
切面:切点+增强