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

AOP面向切面编程

AOP

什么是 AOP

AOP:Aspect oriented programming 面向切面编程,AOP 是 OOP(面向对象编程)的一种延续。

下面我们先看一个 OOP 的例子。

例如:现有三个类,HorsePigDog,这三个类中都有 eat 和 run 两个方法。

通过 OOP 思想中的继承,我们可以提取出一个 Animal 的父类,然后将 eat 和 run 方法放入父类中,HorsePigDog通过继承Animal类即可自动获得 eat()run() 方法。这样将会少些很多重复的代码。

img

OOP 编程思想可以解决大部分的代码重复问题。但是有一些问题是处理不了的。比如在父类 Animal 中的多个方法的相同位置出现了重复的代码,OOP 就解决不了。

/*** 动物父类*/
public class Animal {/** 身高 */private String height;/** 体重 */private double weight;public void eat() {// 性能监控代码long start = System.currentTimeMillis();// 业务逻辑代码System.out.println("I can eat...");// 性能监控代码System.out.println("执行时长:" + (System.currentTimeMillis() - start)/1000f + "s");}public void run() {// 性能监控代码long start = System.currentTimeMillis();// 业务逻辑代码System.out.println("I can run...");// 性能监控代码System.out.println("执行时长:" + (System.currentTimeMillis() - start)/1000f + "s");}
}

这部分重复的代码,一般统称为 横切逻辑代码

img

横切逻辑代码存在的问题:

  • 代码重复问题
  • 横切逻辑代码和业务代码混杂在一起,代码臃肿,不变维护

AOP 就是用来解决这些问题的

AOP 另辟蹊径,提出横向抽取机制,将横切逻辑代码和业务逻辑代码分离。

img

代码拆分比较容易,难的是如何在不改变原有业务逻辑的情况下,悄无声息的将横向逻辑代码应用到原有的业务逻辑中,达到和原来一样的效果。

AOP 解决了什么问题

通过上面的分析可以发现,AOP 主要用来解决:在不改变原有业务逻辑的情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。

AOP 为什么叫面向切面编程

:指的是横切逻辑,原有业务逻辑代码不动,只能操作横切逻辑代码,所以面向横切逻辑

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

原文链接:https://juejin.cn/post/6844903973715968007

相关文章:

  • 前端框架(Front-end Framework)和库(Library)的区别
  • Java接入ChatGPT接口简单示例
  • Android 11.0 systemui锁屏页面时钟显示样式的定制功能实现
  • 设计模式——建造者模式(创建型)
  • 【JavaFX】实现计算器小程序
  • PyCharm连接远程服务器上Docker容器,使用远程服务器的python intercepter解释器和GPU资源 [本地调试深度学习代码]
  • 解决Sortable拖动el-table表头时,由于选择列造成的拖拽顺序错乱的bug
  • 排序-选择排序与堆排序
  • ubuntu18.04配置cuda+cudnn+tensorrt+anconda+pytorch-gpu+pycharm
  • 开源治理典型案例分享(汇编转)
  • 使用BeautifulSoup 4和Pillow合并网页图片到一个PDF:一种高效的方式来处理网页图像
  • 2024 年 SEO 现状
  • IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring IOC底层实现
  • 2023最新vue安装(npm,yarn,国内镜像,vue安装,vue导包)全套教程2023年12月最新
  • 新网站如何被搜索引擎迅速收录
  • C++11: atomic 头文件
  • IP路由与转发
  • JAVA之继承和多态
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Spring框架之我见(三)——IOC、AOP
  • Twitter赢在开放,三年创造奇迹
  • vuex 笔记整理
  • Vue实战(四)登录/注册页的实现
  • 从零开始的无人驾驶 1
  • 读懂package.json -- 依赖管理
  • 记录一下第一次使用npm
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 力扣(LeetCode)21
  • 山寨一个 Promise
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 通信类
  • 携程小程序初体验
  • 源码安装memcached和php memcache扩展
  • puppet连载22:define用法
  • ​2020 年大前端技术趋势解读
  • !!java web学习笔记(一到五)
  • #define 用法
  • ( 10 )MySQL中的外键
  • (11)MATLAB PCA+SVM 人脸识别
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (十一)手动添加用户和文件的特殊权限
  • (学习日记)2024.01.09
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Unity3DUnity3D在android下调试
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .NET 解决重复提交问题
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献