Spring AOP工作机制

本文详细介绍了Spring AOP的工作原理,包括拦截器接口、PointCut、Advisor的概念及其作用,阐述了如何生成代理类实例,并深入分析了具体的拦截机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Advice

      拦截器接口:



PointCut

      包括一个ClassFilter,用于匹配Class;一个MethodMatcher,用于匹配所调用的参数:


Advisor

      包括一个pointcut、一个advice:



生成代理类实例

      步骤:

1)将ProxyFactoryBean属性interceptorNames对应的bean转化为Advisor,加入到advisors中;

2)如果ProxyFactoryBean属性singleton为true,则ProxyFactoryBean创建的代理类为单例,否则为prototype类型;

3)获取被代理类实例target;

4)用AopProxyFactory实例(默认为DefaultAopProxyFactory实例)创建AopProxy:如果代理类需要优化或基于类生成代理类或没有提供需要代理的接口即interceptorNames为空,则创建CglibAopProxy,否则创建JdkDynamicAopProxy;

5)利用CglibAopProxy或JdkDynamicAopProxy动态生成代理类实例,JdkDynamicAopProxy是借助Proxy.newProxyInstance生成代理类实例。

拦截机制

      步骤:

1)代理类实例的调用会调用JdkDynamicAopProxy invoke方法;

2)获取ProxyFactoryBean中的advisors,对其进行for循环;

3)用advisor的pointcut中的classFilter匹配targetClass,用该advisor的pointcut中的methodMatcher匹配所调用的方法,如都匹配,则获取该advisor对应的methodInterceptors;

4)用代理类实例、被代理类Class、被代理类实例、所调用的方法和参数、匹配的methodInterceptors参数new ReflectiveMethodInvocation实例;

5)调用ReflectiveMethodInvocation实例进行所调用方法的拦截及执行。



参考:

Spring AOP介绍及源码分析:http://www.uml.org.cn/j2ee/201301102.asp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值