Spring AOP初探(二)
2016-06-11 19:58
288 查看
作者:谢新亭
链接:https://www.zhihu.com/question/23641679/answer/105442105
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
此答案有毒,请谨慎服用。如果需要深入而且准确理解Spring的工作原理以及设计思想,请阅读以下官方文档。本稿仅供学习!
参考文档:
http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/aop.html
AOP的实现原理是基于动态代理,这一点题主已经提到了。但是Spring是怎么通过动态代理来实现AOP的呢?这一点是题主的疑惑之一。
通过追踪Spring的源码,我们可以看看Spring究竟在AOP这方面究竟做了哪些东西?
(1)代理类的生成与载入
Spring通过ApplicationContext进行Bean的初始化(如果对这一部分有疑惑,请自行百度Spring Bean的生命周期),在这个过程中,我们可以通过以下源码比较清晰的看到在初始化容器过程中,Spring做了哪些事情?
而AOP的代理类以及拦截链则在finishBeanFactoryInitialzation这个方法中载入的。
在生成Proxy的过程中,我们来看看Spring究竟经过了哪些方法?
很容易就看出来,代理类生成是在createProxy方法执行的。它经历以下几个步骤:
(1)构建Advisor
(2)添加Advisor
(3)设置target Source
然后代理类初始化结束。这是AOP的第一个过程——初始化代理类。
之后开始进入AOP的第二个步骤,拦截。这就是我们接下来需要讲到的拦截链。
(2)拦截链的理解与阐述
在调用我们的业务方法前,Spring会根据之前的配置,进行一个拦截。我们可以看看核心代码帮助理解:
首先在拦截器中,它会搜索当前的方法是否具有Advice,如果有,那么它会执行MethodInvocation
当我们继续断点进去后,可以看到
这一段核心的代码则可以解决题主关于拦截链的疑惑。
N/A
链接:https://www.zhihu.com/question/23641679/answer/105442105
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
此答案有毒,请谨慎服用。如果需要深入而且准确理解Spring的工作原理以及设计思想,请阅读以下官方文档。本稿仅供学习!
参考文档:
http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/aop.html
正文
以下是个人结合官方文档以及跟踪Spring AOP的源码后给出的理解。AOP的实现原理是基于动态代理,这一点题主已经提到了。但是Spring是怎么通过动态代理来实现AOP的呢?这一点是题主的疑惑之一。
通过追踪Spring的源码,我们可以看看Spring究竟在AOP这方面究竟做了哪些东西?
(1)代理类的生成与载入
Spring通过ApplicationContext进行Bean的初始化(如果对这一部分有疑惑,请自行百度Spring Bean的生命周期),在这个过程中,我们可以通过以下源码比较清晰的看到在初始化容器过程中,Spring做了哪些事情?
而AOP的代理类以及拦截链则在finishBeanFactoryInitialzation这个方法中载入的。
在生成Proxy的过程中,我们来看看Spring究竟经过了哪些方法?
很容易就看出来,代理类生成是在createProxy方法执行的。它经历以下几个步骤:
(1)构建Advisor
(2)添加Advisor
(3)设置target Source
然后代理类初始化结束。这是AOP的第一个过程——初始化代理类。
之后开始进入AOP的第二个步骤,拦截。这就是我们接下来需要讲到的拦截链。
(2)拦截链的理解与阐述
在调用我们的业务方法前,Spring会根据之前的配置,进行一个拦截。我们可以看看核心代码帮助理解:
首先在拦截器中,它会搜索当前的方法是否具有Advice,如果有,那么它会执行MethodInvocation
当我们继续断点进去后,可以看到
这一段核心的代码则可以解决题主关于拦截链的疑惑。
补充
Spring AOP模型设计与理解N/A
Spring AOP执行步骤拆解
N/A其他
spring及其源码分析专辑相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring AOP动态代理-切面
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 模拟Spring的简单实现
- Spring整合WebSocket应用示例(上)
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- 监听器获取Spring配置文件的方法
- springmvc 发送ajax出现中文乱码的解决方法汇总
- SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
- 详解Java的MyBatis框架和Spring框架的整合运用
- struts2 spring整合fieldError问题
- spring的jdbctemplate的crud的基类dao
- 读取spring配置文件的方法(spring读取资源文件)