
spring
Aquaman_xyh
这个作者很懒,什么都没留下…
展开
-
循环依赖所注入的实例竟不是容器中的实例之一,依赖关系
写在前面私以为自己对于spring的循环依赖理解的已经很不错了,直到前段时间遇到了一个让我思考了良久的问题,即“循环依赖所注入的实例竟不是容器中的实例”。于是又从头仔细撸了一遍源码,才最终找到原因。因为我觉的整个过程涉及到的知识点还蛮多的,所以准备用6-7篇来针对“循环依赖所注入的实例竟不是容器中的实例”这个问题进行剖析。问题引出废话不多说,先来看看这个问题是什么?有两个Service具有循环引用关系,分别是ServiceA和ServiceB,如下。ServiceA.class@Service原创 2020-11-07 21:36:44 · 306 阅读 · 0 评论 -
搞懂AOP之三,偏序排序
可能大家看到这个标题会很有疑问,怎么讲着讲着AOP开始讲起来排序了?先说一下大家都比较熟悉的东西。回忆一下,我们如果想向容器中加入自定义的切面该怎么做?两种方法,其一我们可以自定义Advisor注入到容器中,其二就是利用@Aspect标示一个类为切面配置类,并利用@Around, @Before, @After, @AfterReturning, @AfterThrowing定义一些切面的实现,最后将切面配置类注入到容器中。第一种方法我们后续会进行详细剖析。第二中方法我想应该是大家比较常用的方式。而这跟偏原创 2020-10-23 20:15:38 · 1627 阅读 · 0 评论 -
搞懂AOP之二,引入增强
回顾在上一篇搞懂AOP之一,拦截器链中,我们介绍了MethodInterceptor增强目标类的方式,了解到了AOP的拦截器是如何使用,以及多个拦截器组成的拦截器链是如何工作的,并且看到了如何使用ProxyFactory去创建代理类。本篇接上篇,接着介绍另外一种增强方式–引入增强。了解引入增强定义spring中的引入增强对应IntroductionInterceptor类。看下spring对其的定义:/** * Subinterface of AOP Alliance MethodInterce原创 2020-09-29 20:54:50 · 547 阅读 · 0 评论 -
搞懂AOP之一,拦截器链
bean的创建过程中的初始化阶段的后置处理,在满足条件的情况下会对bean进行AOP增强。核心实现就是AbstractAutoProxyCreator的wrapIfNecessary方法。该方法主要逻辑实现就是,找到容器中能够应用到当前所创建的bean的切面,利用切面为bean创建代理对象。本篇不准备对着源码一步一步讲解这一过程,而是准备剖析一下这一过程中所用到的一些类和方法的功能,当这些都熟悉之后“螺丝”,再一步一步看源码的时候,便会豁然开朗。这也是我在阅读源码过程中的感觉,因为spring的整套源码一原创 2020-09-27 19:59:26 · 1574 阅读 · 2 评论