Spring中AOP底层原理
2021-05-10 19:43:03 7 举报
Spring AOP(面向切面编程)底层原理是通过动态代理实现的。在运行时,Spring会为目标类生成一个代理对象,这个代理对象实现了目标类的所有方法,并在方法执行前后插入切面逻辑。当调用目标方法时,实际上是调用代理对象的同名方法,从而实现了在目标方法执行过程中插入切面逻辑的目的。 Spring AOP支持两种代理方式:JDK动态代理和CGLIB动态代理。JDK动态代理基于接口实现,适用于目标类实现了接口的情况;CGLIB动态代理基于继承实现,适用于目标类没有实现接口的情况。通过使用AspectJ框架,Spring AOP还支持注解方式定义切面和通知,提高了开发效率。
作者其他创作
大纲/内容
基于bean的原始对象和所匹配的Advice和Advisor创建代理对象,然后返回
初始化前
代理对象执行方法子流程
根据当前所调用的方法和对应的类筛选对应的Advisor
初始化
筛选出和当前bean所匹配的Advice和Advisor
MethodInterceptor执行完了之后,会执行被代理对象的对应的方法对象,也就是执行被代理对象中对应的方法,也就是业务方法
开始执行MethodInterceptor,不同类型的MethodInterceptor执行逻辑会有差异,看语雀中的笔记
配置ProxyFactory
给原始对象填充属性
创建代理对象子流程
获取Advisor中的Advice,并封装为MethodInterceptor
调用CglibMethodInvocation对象的proceed()方法
Bean的生命周期
初始化后,这里会开始进行AOP
实例化前,会判断是否对当前beanName设置了TargetSource,可以通过CustomTargetSourceCreators来设置,如果设置了则直接针对所设置的TargetSource进行AOP,得到代理对象后直接返回,不会经过后续的生命周期了
实例化,得到原始对象
构造Enhancer对象
将代理对象、被代理对象、当前正在执行的被代理类中的方法对象、方法参数、被代理的类、chain、当前正在执行的代理类中的方法对象整合成一个CglibMethodInvocation对象
所以代理对象执行方法时就会经过DynamicAdvisedInterceptor
生成代理对象子流程
将得到的所有匹配的MethodInterceptor组合成List<Object> chain
先判断当前bean是不是要进行AOP,比如当前bean的类型是Pointcut、Advice、Advisor等那就不需要进行AOP
构造一个ProxyFactory
将commonInterceptors和specificInterceptors整合再一起
设置DynamicAdvisedInterceptor为Callback
0 条评论
下一页