我是靠谱客的博主 耍酷路人,最近开发中收集的这篇文章主要介绍详解aop之interceptor模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

背景

我们知道aop是spring的一个重要特性,他的重要提醒是切面增强,可以在一个方法执行前和执行后增加一些额外的功能,比如执行前进行权限验证,执行后进行方法执行时间统计等。当然可以在一个方法上添加多个拦截,这时候我们可以把拦截器存放在一个list中,在方法执行前,依次执行拦截器的前置增强-执行方法-后置增强。
对具体方法增强时,静态代理无法实现通用性,所以需要需要用到动态代理技术,也就是通过java的反射获得具体的执行方法,在反射调用方法执行前和执行后添加一些逻辑,可以参考网上的其他教程。这里主要介绍添加多个拦截器的spring实现。

需要实现的目标

对任意目标方法进行代理,增强的方法具有可扩展性,也就是说对一个目标方法可以进行多层代理

spring中的interceptor模式

spring通过ProxyManager对代理类进行管理,其中包括一个实现了proxy接口的list。
可以看到,通过proxyManager对具体方法进行代理包装,有一个creatProxy的方法,返回被代理后的方法,这个方法即对原方法增强后的方法。
creatProxy实际对proxyChain进行调用,在proxychain中包含一个实现了Proxy接口的集合,proxy为代理接口,主要实现对方法增强的逻辑,包括doProxy(),before(),after()等接口。
proxy实现类中需要包含一个proxyChain,doProxy方法通过调用proxyChain的doProxyChain方法以实现proxy列表依次增强的传递性,参考时序图。

uml
时序图

总结

spring通过组合的方式,使动态代理的实现 和 目标方法被代理后的调用进行了解耦,实现了可扩展性。实现了Proxy接口的类,只负责对方法进行相关逻辑的增强。目标方法代理调用通过包含了 一个 包含了实现多个proxy接口的集合 的ProxyChain来实现。接下来就需要通过IOC对目标类和ProxyChain进行关联,在调用相关方法时,直接调用被代理包装后方法。
demo地址:https://github.com/stunode/demo

最后

以上就是耍酷路人为你收集整理的详解aop之interceptor模式的全部内容,希望文章能够帮你解决详解aop之interceptor模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部