婚纱摄影网站模板免费下载,海文考研培训班2023价格表,wordpress首页显示文章图片,素材网免费下载AOP底层原理可以划分成四个阶段#xff1a;创建代理对象阶段、拦截目标对象阶段、调用代理对象阶段、调用目标对象阶段 第一阶段#xff1a;创建代理对象阶段
通过getBean#xff08;#xff09;方法创建Bean实例根据AOP的配置匹配目标类的类名#xff0c;判断是否满足切… AOP底层原理可以划分成四个阶段创建代理对象阶段、拦截目标对象阶段、调用代理对象阶段、调用目标对象阶段 第一阶段创建代理对象阶段
通过getBean方法创建Bean实例根据AOP的配置匹配目标类的类名判断是否满足切面规则规则指的是 // 切面规则匹配所有以 Service 结尾的类的所有方法
execution(* com.example.*Service.*(..))如果满足规则调用ProxyFactory创建代理Bean并缓存到IoC容器中根据目标对象的是否实现接口选择不同的代理策略通常是JDK Proxy基于接口的代理或Cglib Proxy基于类的代理
目标对象就是我们自己写的业务代码
第二阶段拦截目标对象阶段
当用户调用目标对象的方法的时候被一个名为AopProxy的对象拦截AopProxy对象封装了所有的调用策略并且实现了IncationHandler接口在IncationHandler的invoke方法中出发了MethodInvocation的proceed方法proceed方法按照顺序执行符合所有AOP拦截规则的拦截器链
其中invoke() 方法用于定义切面的逻辑而 proceed() 方法用于在拦截器链中继续执行下一个拦截器或最终执行目标方法
MethodInvocation负责执行拦截器链在proceed()方法中执行
第三阶段调用代理对象阶段
AOP拦截器链中的每个元素被称为MethodInterceptor即切面配置中的Advice通知MethodInterceptor接口的invoke方法被织入的代码片段这些被织入的代码片段在这个阶段执行通常是切片配置中定义的通知方法
织入代码就是要在我们自己写的业务代码增加的代码片段
切面通知就是封装织入代码片段的回调方法
负责执行织入的代码片段在invoke()方法中执行。
第四阶段调用目标对象阶段
MethodInterceptor接口中的invoke方法触发对目标对象方法的调用即反射调用目标对象的方法例如 public class MyInterceptor implements MethodInterceptor {Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {System.out.println(Before method execution);// 通过反射调用目标对象的方法Object result invocation.proceed();System.out.println(After method execution);return result;}
}