这个问题主要研究春季的底层如何实现AOP
每个人都知道,如果您想实现AOP,则必须先编写注释,所以让我们首先看看该注释所做的事情
让我们看看这个豆在春天所做的事情知道AOP的原理。
让我们看看如何获取增强器列表
您可以看到调用父类以获取列表的方法。实际上,它是空的,然后打电话给您的构建器返回列表。自然,构建器的声音逻辑可以通过代码看到。AspectBeanNames是空的,因此它将遍历整个弹簧容器中的所有对象,然后找到切割类型。发现杆的切面表面中的增强方法,然后返回。可以看到弹簧遍历切割表面类别的每种方法。判断剪切表面上的方法是否不好是不好的,也就是说,该方法被传递以生成对象。不能生成对象。
后处理后天文总结了此方法中的AOP做两件事
Spring创建BEAN对象并结束属性分配后,调用后处理后将其拨打,然后AOP组件会做点什么。生命周期过程显示在图中。
方法调用必要的包裹。如果名称暗示,如果您满足条件,请创建一个代理包装类,
2.知道如何确定是否需要增强班级。
生成代理对象时,它还将确定它是使用JDK的动态代理还是CGLIB
返回增强剂
我们看到切割方法被包裹在增强方法中
springboot2.x当前的动态代理是gclib,所以当调用呼叫时
让我们首先看一下生成拦截器的逻辑。弹簧遍历容器中的所有增强器,以生成拦截器以生成拦截器。转换为拦截器增强器获得的逻辑在方法中。每个不同的切割表面都会产生不同的建议
生成拦截器后,开始调用继续方法的过程逻辑。
该增强器的建议是执行过程时的第一个执行是Spring提供的增强。该方法通过螺纹插座保存,然后继续调用处理方法。索引索引增加了,因此取出下一个拦截器链并继续执行。