zoukankan      html  css  js  c++  java
  • Spring AOP

    记录一些自己对Spring AOP粗浅的理解:(如有不对望大佬指正)

    1.spring容器里所有的bean都会被代理,实现了接口的用的jdk代理,没有实现接口的用cglib代理。

    2.每个bean会有多个方法拦截器,拦截器分内外两层,外层拦截器是由spring控制,内层拦截器由用户自己控制(自己定义的切面类,以及切点)。

    3.每个方法被调用时都会先执行外层拦截器,外层拦截器决定执行哪些内层拦截器,内层拦截器的设计就是职责链模式。

    可以讲Spring AOP分两部分来阐述:(代码位置:com.interface21.aop 包下)

    • 代理的创建
    1. 首先需要创建代理工厂,代理工厂需要三个重要的信息:拦截器数组,目标对象接口数组,目标对象。
    2. 创建代理工厂时默认会在拦截器数组尾部加一个默认拦截器,用于最终调用目标对象方法,这个很好理解,无论有没有自己定义拦截器,最终都是要调用到目标对象本身的方法,这个拦截器必不可少。
    3. 调用getProxy方法获取代理对象,它会根据目标对象接口数组的大小(>0表示实现了接口,直接通过jdk代理,反之cglib)来决定是通过jdk代理还是cglib代理来返回一个代理对象。(创建代理对象的同时会创建一个外层拦截器用于对整个aop流程的控制)
    • 代理的调用
    1. 调用代理的方法时会先调用外层拦截器。
    2. 外层拦截器根据代理配置信息创建内层拦截器链,根据表达式判断该拦截是否匹配当前拦截器,这边使用到了职责链模式。
    3. 最终调用到默认拦截器,执行对象方法,并将结果返回给拦截器,返回到最外层。
  • 相关阅读:
    GCD
    SQLite
    将博客搬至CSDN
    Extjs 4 总结
    spring mvc 复杂参数注入
    7/12 聊天室结束
    7/10
    7/6一些知识点
    随便写写
    spring boot 入门操作(三)
  • 原文地址:https://www.cnblogs.com/indecy/p/11658576.html
Copyright © 2011-2022 走看看