当前位置: 首页 > news >正文

J2EE框架技术 第六章 J2EE的AOP

    序:在上一章节中我们深入学习了Spring注入的概念和和使用方法,本章节我们继续学习Spring另一个重要思想,AOP面向切面编程。

第一节:初识AOP

一、概念:

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。——引自百度百科

    AOP解决的问题:

1、现象: 通常情况下,我们会根据业务使用 OOP(面向对象)思想,将应用划分为多个不同的业务模块,每个模块的核心功能都只为特定的业务领域提供服务,例如电商系统中的订单模块、商品模块、库存模块就分别是为维护电商系统的订单信息、商品信息以及库存信息而服务的。

2、问题: 应用中往往还存在一些非业务的通用功能,例如日志管理、权限管理、事务管理、异常管理等。这些通用功能虽然与应用的业务无关,但几乎所有的业务模块都会使用到它们,因此这些通用功能代码就只能横向散布式地嵌入到多个不同的业务模块之中。这无疑会产生大量重复性代码,不利于各个模块的复用。

    AOP的组成:

  • Joinpoint(连接点):在系统运行之前,AOP 的功能模块都需要织入到具体的功能模块中。要进行这种织入过程,我们需要知道在系统的哪些执行点上进行织入过程,这些将要在其之上进行织入操作的系统执行点就称之为 Joinpoint,最常见的 Joinpoint 就是方法调用。

  • Pointcut(切点):用于指定一组 Joinpoint,代表要在这一组 Joinpoint 中织入我们的逻辑,它定义了相应 Advice 将要发生的地方。通常使用正则表达式来表示。对于上面的例子,Pointcut 就是表示 “所有要加入日志记录的接口” 的一个 “表达式”。例如:“execution( com.joonwhee.open.demo.service...*(..))”。

  • Advice(通知/增强):Advice 定义了将会织入到 Joinpoint 的具体逻辑,通过 @Before、@After、@Around 来区别在 JointPoint 之前、之后还是环绕执行的代码。

  • Aspect(切面):Aspect 是对系统中的横切关注点逻辑进行模块化封装的 AOP 概念实体。类似于 Java 中的类声明,在 Aspect 中可以包含多个 Pointcut 以及相关的 Advice 定义。

  • Weaving(织入):织入指的是将 Advice 连接到 Pointcut 指定的 Joinpoint 处的过程,也称为:将 Advice 织入到 Pointcut 指定的 Joinpoint 处。

  • Target(目标对象):符合 Pointcut 所指定的条件,被织入 Advice 的对象。

    AOP的示意图:

    

相关文章:

  • 单例模式详解
  • Git 分支
  • 智能交通预警杆:守护道路安全的科技先锋
  • 移动端六大语言速记:第3部分 - 函数与方法
  • Unbantu24.04配置-软件安装
  • Python Cookbook-4.15 字典的一键多值
  • 用“断舍离”整理你的数据:Lasso回归解读
  • Java——输入,循环,BigInteger,拷贝,排序
  • 【C++标准IO库】字符串流
  • 数据结构 -- 树的应用(哈夫曼树和并查集)
  • Python之贪心算法
  • PyTorch 深度学习实战(29):目标检测与 YOLOv12 实战
  • 【多线程】单例模式和阻塞队列
  • 云原生系列-K8S实战
  • Linux 练习三 Keepalive+LVS+Nginx+NFS高可用架构
  • 玛卡巴卡的k8s知识点问答题(五)
  • 实时事件流处理架构的容错设计
  • 电子电气架构 --- 车载HUD分析
  • 【前端】【React】第二章:生命周期、Hooks 和 React 18 相关优化
  • nginx 动静分离