Spring Aop源码学习--JoinPoint连接点
来源:互联网 发布:药智网数据库 编辑:程序博客网 时间:2024/06/01 07:14
JoinPoint连接点:程序执行过程中明确的点,简单的来说就是Java程序执行过程中的方法。
JoinPoint接口图:
JoinPoint通过抽象实现成为一个个的Method,在执行每个JoinPoint所代表的Method中,会执行对应的Advice(参考博客Spring Aop源码学习--Advice通知)。
JoinPoint接口提供的方法
public interface Joinpoint {//在实现中完成Method及Advice的执行Object proceed() throws Throwable;Object getThis();AccessibleObject getStaticPart();}在JoinPoint的实现类ReflectiveMethodInvocation中实现了方法proceed()。
@Overridepublic Object proceed() throws Throwable {//interceptorsAndDynamicMethodMatchers所有同志的链表if (this.currentInterceptorIndex == this.interceptorsAndDynamicMethodMatchers.size() - 1) {//如果所有的advice都已经进行处理就可以递归执行方法了return invokeJoinpoint();}//每次获取一个adviceObject interceptorOrInterceptionAdvice =this.interceptorsAndDynamicMethodMatchers.get(++this.currentInterceptorIndex);if (interceptorOrInterceptionAdvice instanceof InterceptorAndDynamicMethodMatcher) {InterceptorAndDynamicMethodMatcher dm =(InterceptorAndDynamicMethodMatcher) interceptorOrInterceptionAdvice;if (dm.methodMatcher.matches(this.method, this.targetClass, this.arguments)) {return dm.interceptor.invoke(this);}else {// Dynamic matching failed.// Skip this interceptor and invoke the next in the chain.return proceed();}}else {//在调用的Advice的invoke方法时会递归调用proceed方法return ((MethodInterceptor) interceptorOrInterceptionAdvice).invoke(this);}}在interceptorsAndDynamicMethodMatchers中包含了需要切入某个方法所有的Advice通知,通过不断的递归调用完成所有的Advice和Method执行顺序的预处理。
@Overridepublic Object invoke(MethodInvocation mi) throws Throwable {//执行mi.proceed执行先执行BeforeAdvicethis.advice.before(mi.getMethod(), mi.getArguments(), mi.getThis() );return mi.proceed();}当链表中所有的Advice通知都被处理执行开始执行invokeJoinpoint方法,来进行对目标方法的执行。
@Overrideprotected Object invokeJoinpoint() throws Throwable {if (this.publicMethod) {return this.methodProxy.invoke(this.target, this.arguments);}else {return super.invokeJoinpoint();}}
阅读全文
0 0
- Spring Aop源码学习--JoinPoint连接点
- Spring AOP那些学术概念—通知、增强处理连接点(JoinPoint)切面(Aspect)
- spring aop JoinPoint 用法
- 菜鸟学习Spring——60s利用JoinPoint(连接点)获取参数的值和方法名称()
- AOP那些学术概念—通知、增强处理连接点(JoinPoint)切面(Aspect)
- AOP那些学术概念—通知、增强处理连接点(JoinPoint)切面(Aspect)
- spring Aop 配置文件方式+JoinPoint获取参数
- spring Aop 配置文件方式+JoinPoint获取参数
- Spring源码学习--AOP那点事(一)
- Spring源码学习--AOP那点事(二)
- Spring Aop源码学习--Aop代理AopProxy
- Spring源码学习之AOP
- spring aop 中 org.aspectj.lang.JoinPoint-中文简要API
- Spring aop joinpoint advice advisor pointcut target自己理解
- Spring AOP中JoinPoint的表达式定义描述
- Aop Joinpoint语法
- spring aop 3 Spring AOP中JoinPoint的表达式定义描述
- Spring源码学习(二)------ AOP
- 为什么要使用CMake+VS编译OpenCV的源码
- Qt 常用类 —— QFont
- POJ1724
- JZOJ 3929. 【NOIP2014模拟11.6】创世纪
- 排序算法——直接选择排序
- Spring Aop源码学习--JoinPoint连接点
- 关于Java开发中设计模式的使用问题
- 线性表之栈的顺序存储实现
- 小仙女—快速入门javescript基础
- Collection接口下的集合
- 【NOIP2014模拟11.6】射击
- Leetcode算法学习日志-169 Majority Element
- 关于研究一个新领域,研究思路的总结
- jeesite使用中遇到的异常记录