spring AOP原理分析

ProxyFactoryBean 的getObject方法作为入口 有两个任务 第一个是获得它的通知 并初始化适配 注册成为拦截器链 具体的配置内容在Config AdviceSupport类中 类通过实现了setBeanFactory方法获得了IOC容器的回调 从而可以使用IOC容器 并拥有Advice的配置信息 根据配置信息 name向IOC容器中getbean()方法 获得了advice对象 然后交给一个注册类 注册类中有各种适配类 adapt 会适配具体的advice属于哪一种 有MethodBefore AfterRurning 等等 适配合适的advice后交给Interceptor封装起来 Interceptor的invoke()方法会触发拦截器的调用 如果是MethodBefore会先去调用advice方法 在执行proceed()方法 然后交给其注册类注册 维护一个List 也就是拦截器的List 

接下来是Proxy对象的生成 Proxy对象根据目标方法是否实现了接口 如果实现了接口就使用 动态代理生成 如果没有 就使用CGLIB生成 那个JDKDynamicProxy 类实现了InvokeHandle接口 所以重写了invoke方法 invoke方法中 如果调用了代理类的相关方法 就会跳转到invoke去执行 invoke方法中 先去获得初始化好的拦截器链 用责任链模式去执行 执行完拦截器链 最后执行目标方法 也就是invoke方法中做到了通知的织入和增强

 

AOP还有高级配置 也就是HotSwappableTargetSource 这个类的swap方法以线程安全的方式 替换了target类 也就是实现了运行时不影响拦截器的情况下做到替换target 实现热交换 目标方法 最后invoke方法中获得target的是交换后的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值