Aop面向切面编程

83 阅读2分钟

一.概念

区别于oop(封装继承)为纵向开发

aop为oop的完善方法 面向编程思维缺点:

  • 多了好多业务无关的模块
  • 继承父类的方法:
  • 不是抽象的,可以完成使用,完全重写父类方法
  • 无法局部修改

面对零散的非核心的业务,会出现冗余代码

aop横向思维: 允许类的正常继承 提取一个非核心的业务代码统一到一个公共模块,存,利用某些技术横切出来 动态代理技术 **核心关注点

  • 横切关注点**:
  • 提取横向插入
  • 增强:
  • 织入:配置的动作
  • 前置通知:目标方法之前@before
  • 返回通知:正常返回的AfterRrturning
  • 异常增强:事务回滚@afterThrowing
  • 后置通知:最后一定会被调用的@after
  • 环绕通知:环绕调用@Around
  • (try...catch)
  • 切点一定是连接点,被选中切入的连接点 连接点:可以被切入的方法 切入点: 目标类:要被切入的类的对象

代理对象:

  • 目标的核心代码
  • 增强代码

二.AOP的框架 Soring AOP 解决aop编程思维的框架,更加的简单的解决 只要写好配置文件,框架底层用代理技术 jdk接口,cglib无接口 简化操作

  1. 导入依赖

  2. 正常编写业务

  3. 编写ioc配置和文件

  4. 测试环境

  5. 定义增强方法

  6. 增强类的配置:存储插入切点的位置,切点指定,切面配置

  7. 开启aop的配置

  8. 定义方法:增强类的内部要写代码,

  9. 使用注解配置对应位置

  10. 配置切点表达式 execution

  11. 补全注解: 放入ioc容器@Component 配置切面@AsPECT

aspectj 开启支持 配置文件:标签aop开启支持aspect支持 连接点:JoinPoint(包含目标方法的信息

todo: 增强方法获取目标信息 发返回结果 获取异常信息(afterthroing)

获取类的信息 获取方法名称