Please enable JavaScript.
Coggle requires JavaScript to display documents.
AOP - Coggle Diagram
AOP
Joinpoint
- 只提供方法级别的JointPoint ,可以通过setter/getter 对属性进行捕捉
Pointcut
接口包含两个方法
- getClassFilter() 匹配对象 /getMethodMatcher 匹配方法
Advice
- per-class 可以在所有实例共享,拦截实例方法
- beforeAdvice 实现MethodBeforeInterceptor 接口即可完成该advice定义
- ThrowsAdvice 实现ThrowsAdvice 接口 通过重载afterThrowing 方法拦截不同的异常
- AfterReturningAdvice 实现AfterReturningAdvice接口的afterReturning 方法
- AroundAdvice 实现MethodIntercetor 接口 的invoke方法,其中invocation.process() 表示调用拦截的方法,因此其可以改变返回值
- per-instance 不可以所有实例共享 主要是扩展类的功能一类
-
Aspect
SPringAOP中advisor 代替Aspect概念,advisor 可以分为两类:
- PointcutAdvisor
- IntroductionAdvisor
织入
ProxyFactory
- 织入的目标对象
- 应用到目标对象的Advisor
- 根据有没有接口来决定用JDK动态代理还是CGLIB
ProxyFactory继承这两个类
- AdvisedSupport 生成代理对象所需要的信息的载体
- ProxyConfig 生成代理对象的控制信息
- Advised 生成代理对象的必要信息如:目标类Advice、advisor ..
- AopProxy 实现不同代理机制
- 不同的实现通过AopProxyFactory提供
ProxyFactoryBean
- 生产Proxy的FactoryBean ,继承FactoryBean ,其 getObject 方法可以返回 单例和多例模式两种代理对象
-
TargetSource
- ProxyFactory 使用setTarget 方法 setTargetSource 方法来指定对象
- TargetSource 对代理对象进行包装
- 每次的方法调用都会触发其getTarget方法getTarget从其实现类中获取目标对象:
- 提供一个对象池每次从池中获取对象
- 按某种规则返回对象
- SingletonTargetSource 使用最多的实现类,返回单例的目标对象
- PrototypeTargetSource 每次返回新的目标对象
- HotSwappableTargetSource 在程序运行时,根据某种条件动态的替换目标对象 (AbstractRoutingDataSource 实现读写分离库)
- CommonsPoolTargetSource 目标对象池提供对象
- ThreadLocalTargetSource 为每个线程创建新对象
自动代理实现
通过AbstractAutoProxyCreator这个BeanPostProcessor