SpringAOP原理主要分为三个部分:
- 创建代理类
- 代码织入
- 通知回调
AOP的入口在Spring依赖注入之后的初始化方法中(initializeBean),在Bean初始化完成之后,会调用BeanPostProcessor的后置处理器方法,该处理器的实现类AbstractAutoProxyCreator负责代理类的创建。该类首先会获得Spring中所有的通知Advice,并根据当前对象进行切入点表达式的匹配,如果能够匹配上则表示当前对象需要增强。在创建代理过程中会判断当前对象是否满足JDK动态代理的条件,如果不满足则通过代理工厂类生成CGLib动态代理。
2. 代码织入通知代码的织入主要在动态代理类中的invoke方法中,该方法会根据当前要执行的Method方法,去获取对应的Advice通知,并将Advice封装成MethodInterceptor对象,最终返回一个方法拦截器链。然后根据Method与拦截器链封装成MethodInvocation对象。
3. 通知回调MethodInvocation对象通过调用proceed方法执行方法的调用,proceed方法中通过游标循环执行已经排序好的拦截器方法,不同的拦截器方法在不同的时机进行调用,最终完成代码功能的增强。
时序图欢迎分享,转载请注明来源:内存溢出
评论列表(0条)