首页 > 社交 > 科普中国

Spring

常驻编辑 科普中国 2022-05-29 切面   切入点   注解   线程   实战   源码   原理   过程   类型   方式   通知   方法
qHb拜客生活常识网

org.springframework.aop.framework.AbstractAdvisingBeanPostProcessor#postProcessAfterInitializationqHb拜客生活常识网

qHb拜客生活常识网

创建通知器过程

接下来我们就分析 AsyncAnnotationAdvisor 是如何创建的。qHb拜客生活常识网

qHb拜客生活常识网

AsyncAnnotationAdvisor 实现了 PointcutAdvisor 接口,因此需要同时实现 getPointcut 和 getAdvice 方法,而这两个方法的实际内容有以上红框创建实现。qHb拜客生活常识网

到这里我们已经知道,Spring 的异步实现原理,是利用 Spring AOP 切面编程实现的,通过 BeanPostProcessor 拦截处理符合条件的 bean,并将切面织入,实现切面增强处理。qHb拜客生活常识网

Spring AOP 编程核心概念:qHb拜客生活常识网

Advice:通知,切面的一种实现,可以完成简单的织入功能。通知定义了增强代码切入到目标代码的时间点,是目标方法执行之前执行,还是执行之后执行等。切入点定义切入的位置,通知定义切入的时间;qHb拜客生活常识网

Pointcut:切点,切入点指切面具体织入的方法;qHb拜客生活常识网

Advisor:切面的另一种实现,能够将通知以更为复杂的方式织入到目标对象中,是将通知包装为更复杂切面的装配器。qHb拜客生活常识网

因此我们需要创建一个切面和切入点:qHb拜客生活常识网

  • buildAdvice:

qHb拜客生活常识网

buildAdvice 方法可知,切面是一个 AnnotationAsyncExecutionInterceptor 类,该类实现了 MethodInterceptor 接口,其 invoke 方法即为拦截处理的核心源码,后面会进行详细分析。qHb拜客生活常识网

  • buildPointcut:

从 AsyncAnnotationAdvisor 构造器中可以看出,buildPointcut 方法目的就是为了创建 @Async 注解的切入点。qHb拜客生活常识网

通知器拦截处理过程

前面我们已经知道,拦截切面是一个 AnnotationAsyncExecutionInterceptor 类,我们直接定位到 invoke 方法一探究竟:qHb拜客生活常识网

org.springframework.aop.interceptor.AsyncExecutionInterceptor#invokeqHb拜客生活常识网

qHb拜客生活常识网

拦截处理的核心逻辑就是这么简单,也没啥好分析的,无非就是匹配方法指定的线程池,接着构建执行单元 Callable,最后调用 doSubmit 方法执行。qHb拜客生活常识网

如何匹配线程池?

重点在于如何匹配线程池,这也是后面实战分析的重点内容,因此我们需要在这里详细分析匹配线程池的一些策略细节。qHb拜客生活常识网

org.springframework.aop.interceptor.AsyncExecutionAspectSupport#determineAsyncExecutorqHb拜客生活常识网

qHb拜客生活常识网

相关阅读:

  • “想了两个月,馋了两个月”…上海人最爱的切面、馄饨皮
  • 面食大全114
  • 当你走投无路的时候,千万不要放弃,这恰恰是你绝处逢生的
  • 校长带发霉面包看望学生?先别急着指责校长
  • 手撕白菜/包菜
  • 过年吃饺子,十几年都是这个馅,3样食材搭配,鲜美,全家喜爱
  • 吃了半辈子疙瘩汤,这做法真是头一次见,味道鲜美,全家爱喝
  • 冬天发面时,记住别直接和面,把经验都告诉你,发面就是这么
  • 面包机可以代替厨师机揉面么?哪个揉面更好?
  • 今年夏天最爱的心机身体乳,涂完全身马上白2个度
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。