简述Spring AOP基础接口

概念

  • OOP(Object Oriented Programming)面向对象程序设计
    个人理解:将现实事物抽象为对象,由属性(事物状态)与方法(事物行为)组成。对象即可以表示猫亦可表示人,对象间通过消息传递相互通信,来模拟现实世界中不同事物的联系。
    特性:封装(以对象作为最小单元)、继承(复制上层对象作为自身对象的一部分)、多态(同族对象具备相同行为但行为的结果不同)
  • AOP(Aspect Oriented Programming)面向切面程序设计
    个人理解:将OOP抽象后的对象组按照某个维度再次抽象,形成切面对象。
    使用场景:权限校验、事务处理、日志记录

AOP组织

AOP Alliance项目是几个对AOP和Java感兴趣的软件工程人员之间的联合开源项目(http://aopalliance.sourceforge.net/)

AOP实现

  • 编译期实现
    • AspectJ (TM): 使用专门的Java编译器实现
  • 运行期实现
    • Spring AOP:基于动态代理(jdk的动态代理或者cglib的动态代理)实现

Spring AOP

  • 部分AOP Alliance接口(Spring中可以使用任何AOP Alliance MethodInterceptor)

    1.部分AOP Alliance接口
    1588434318(1).png
    1. 接口说明
      • Joinpoint(连接点):运行时连接点表示在连接点上发生的事件()
      • Invocation:表示程序中的调用(运行时的连接点)
      • Advice(通知):当连接点上事件被触发时的处理逻辑
      • Interceptor:表示通用拦截器
    2. 接口关系
      屏幕截图 2020-05-02 10.42.40.png
    3. 使用案例
       class DebuggingInterceptor implements MethodInterceptor, ConstructorInterceptor {
      
       Object invoke(MethodInvocation i) throws Throwable {
         debug(i.getMethod(), i.getThis(), i.getArgs());
         return i.proceed();
       }
      
       Object construct(ConstructorInvocation i) throws Throwable {
         debug(i.getConstructor(), i.getThis(), i.getArgs());
         return i.proceed();
       }
      
       void debug(AccessibleObject ao, Object this, Object value) {
         ...
       }
      }
      
  • Spring AOP接口(基于AOP Alliance扩展接口)
    1. 扩展内容:
      • Introduction support:org.springframework.aop.IntroductionInfo(支持在被代理对象中新增行为)
      • A Pointcut abstraction:org.springframework.aop.Pointcut(提供连接点过滤条件的接口,支持类过滤与方法(包括方法参数)过滤)
      • A full range of advice types, including around, before, after returning and throws advice(支持更多Advice类型)
      • 高扩展:支持在不修改核心框架的情况下插入任意自定义Advice类型
    2. 接口说明
      • IntroductionInfo:定义在被代理对象新增行为的集合
      • MethodMatcher:检查目标方法是否能被通知(属于Pointcut一部分)
      • ClassFilter:检查目标类是否能被通知
      • Pointcut:通过MethodMatcher与ClassFilter过滤连接点,形成切面范围
      • Advisor:包含Advice与过滤Joinpoint的过滤器(如:pointcut)的组合
      • TargetSource:用于获取当前被代理的对象
      • SpringProxy:由Spring生成代理的标识
    3. 接口关系
      aopspring.jpg

你可能感兴趣的:(简述Spring AOP基础接口)