Spring-AOP

什么是AOP?

  AOP:Aspect oriented Programming 面向切面编程/面向方面编程

  AOP是OOP(面向对象编程)的延续,从OOP开始:

    OOP三大特种:封装继承多态

    OOP是一种垂直继承体系

    OOP编程思想可以解决大多数的代码重复问题,但是有一些情况是处理不了的,比如在多个方法中相同位置(参照业务逻辑)出现了重复代码(横切逻辑代码),OOP就解决不了

  横切逻辑代码的问题:

    • 代码重复
    • 代码和业务代码混杂在一起,代码臃肿,维护困难    

  然后AOP:

    AOP提出横向抽取机制,将横切逻辑代码和业务逻辑代码分离,代码的拆分容易,如何在不改变原有业务逻辑的情况下,悄无声息的将横切逻辑代码应用到原来的业务逻辑中?

AOP解决什么问题?

  在不改变原有业务逻辑情况下,增强横切逻辑代码,基本上解耦合,避免横切逻辑代码重复

为什么叫作面向切面编程?

  [切]:横切逻辑,原有业务逻辑代码我们不能动,只能操作横切逻辑代码

  [面]:横切逻辑代码往往要影响很多个方法,每一个方法都如同一个点,多个点构成面,有一个面的概念在里面

 

AOP的本质:在不改变原有业务逻辑的情况下增强横切逻辑,横切逻辑代码玩个网是权限校验代码、事务控制代码、性能监控代码等

AOP术语

  名词                   解释
Joinpoint(连接点)
它指的是那些可以⽤于把增强代码加⼊到业务主线中的点,这些点指的就是⽅法。在⽅法执⾏的前后通过动态代理技术加⼊增强的代码。在Spring框架AOP思想的技术实现中,也只⽀持⽅法类型的连点
Pointcut(切入点)
它指的是那些已经把增强代码加⼊到业务主线进来之后的连接点
Advice(通知/增强) 它指的是切⾯类中⽤于提供增强功能的⽅法。并且不同的⽅法增强的时机是不⼀样的。⽐如,开启事务肯定要在业务⽅法执⾏之前执⾏;提交事务要在业务⽅法正常执⾏之后执⾏,⽽回滚事务要在业务⽅法执⾏产⽣异常之后执⾏等等。那么这些就是通知的类型。其分类有:前置通知 后置通知 异常通知 最终通知 环绕通知
Target(目标对象)
它指的是代理的⽬标对象。即被代理对象
Proxy(代理)
它指的是⼀个类被AOP织⼊增强后,产⽣的代理类。即代理对象
Weaving(织入)
它指的是把增强应⽤到⽬标对象来创建新的代理对象的过程。spring采⽤动态代理织⼊,⽽AspectJ采⽤编译期织⼊和类装载期织⼊
Aspect(切面) 它指定是增强的代码所关注的⽅⾯,把这些相关的增强代码定义到⼀个类中,这个类就是切⾯类。例如,事务切⾯,它⾥⾯定义的⽅法就是和事务相关的,像开启事务,提交事务,回滚事务等等,不会定义其他与事务⽆关的⽅法

 

连接点:方法开始、结束时、正常运行完毕时、方法异常时等这些特殊的时机点,称之为连接点,项目中每个方法都有连接点,连接点是一种候选点

切入点:指定AOP思想想要影响的棘突方法,描述感兴趣(特定)的方法

Advice增强:

  • 层次一、指的是横切逻辑
  • 层次二、方位点(在某一些连接点上加上横切逻辑,那么这些连接点叫方位点,描述的是具体的时机)

Aspect切面:切面是一个综合的概念

  = 切入点 + 增强

  = 切入点(锁定方法) + 方位点(锁定时机)+ 横切逻辑

 

posted on 2020-07-30 21:58  未知不知  阅读(108)  评论(0)    收藏  举报