在学习 Spring 中,有一个很重要的内容就是 AOP,面向切面编程。

  • 很多人疑惑为什么叫做面向切面?
  • 切面是什么意思,切入点是什么意思?

下面我以一种通俗易懂的方式谈谈我的理解。

切面与切入点

切面 = 切入点 + 额外功能。

我们先从几何的角度出发,我们都知道点构成面,任何一个面都是由很多个点构成的,比如桌面是由很多个木头点构成的,而这些木头点都有相同的特性:他们都是木头,如果我们想给这些木头点加一些额外的功能,让他们都变成红色的,只需要用红色的油漆将桌子刷成红色,相当于我们给桌子上的所有的点应用了一个红色的切面,其中红色就是额外功能。


假如现在我们有 3 个类,UserServiceImplOrderServiceImplProductServiceImpl

我们将他们类比成 3 个圆柱体:

  • 首先在这些圆柱体上各取一个点:相当于各取类中的一个方法。
  • 我们将这些点连起来,由此确定了一个平面:相当于将额外功能同时加到这几个方法上面。
  • 这个连起来得到的平面就是切面,切面上的点都附加了额外功能。

如何理解面向切面编程中的切面?相关推荐

  1. AQS理解之五—并发编程中AQS的理解

    AQS理解之五-并发编程中AQS的理解 首先看下uml类图: AbstractOwnableSynchronizer 这个类定义是提供一个创建锁的基础,设置一个排它线程,帮助控制和监控访问. 先看下A ...

  2. springboot异步和切面_spring中的切面和异步执行

    1.首先理解异步和多线程的概念,怎么实现接口的异步调用呢?多线程,这是很多人第一眼想到的关键词,没错,多线程就是一种实现异步调用的方式! 2.下面介绍怎么实现异步调用方式 3.首先如果你的项目是spr ...

  3. 深入理解python异步编程 中_这篇文章讲得精彩-深入理解 Python 异步编程(上)!

    可惜,二和三现在还没有出来~ ~~~~~~~~~~~~~~~~~~~~~~~~~ http://python.jobbole.com/88291/ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  4. java 用面向接口编程的方式开发打印机_Java“打印机”模型理解面向接口编程。实现接口定义类,接口实现类,核心“业务”类分离...

    接口定义类 IinkBox.java package printerDemo.iface; public interface IInkBox { public String getColor(); } ...

  5. 我的控制反转,依赖注入和面向切面编程的理解

    感谢http://blog.xiaohansong.com/2015/10/21/IoC-and-DI/ 的供图 1.什么是控制? 如下图所示,我们看到了 软件系统中 对象的 高耦合现象.全体齿轮的转 ...

  6. Spring面向切面编程(AOP)详解

    Spring面向切面编程(AOP)详解 面向切面编程(AOP)是Spring框架的另外一个重要的核心内容. 而在讲AOP之前,先来了解一下动态代理这个概念,因为AOP基于动态代理. 动态代理概念:在程 ...

  7. Autofac的切面编程实现

    面向切面编程:Autofac.Annotation扩展组件是我开源的一款利用打标签完成autofac容器的注入组件. https://github.com/yuzd/Autofac.Annotatio ...

  8. Aop切面编程原理和Spring实现

    Aop切面编程概念 AOP切面编程一般可以帮助我们在不修改现有代码的情况下,对程序的功能进行拓展,往往用于实现 日志处理,权限控制,性能检测,事务控制等 AOP实现的原理就是动态代理,在有接口的情况下 ...

  9. YII2集成GOAOP,实现面向方面编程!

    引言: 软件开发的目标是要对世界的部分元素或者信息流建立模型,实现软件系统的工程需要将系统分解成可以创建和管理的模块.于是出现了以系统模块化特性的面向对象程序设计技术.模块化的面向对象编程极度地提高了 ...

最新文章

  1. android服务器压力测试,Android压力测试Monkey工具
  2. java redis缓存工具类_util: 对日常工作中常见的工具类进行打包: 1、数据库:DBUtil工具类 2、Redis缓存:JedisUtil工具类...
  3. 接口应用之“静态代理”
  4. C/C++中MySQL环境配置教程
  5. 【英语学习】【Level 08】U03 My Choice L5 The star that shines the brightest
  6. 通过复制oracle软件方式安装oracle数据库
  7. matlab左除怎么输入法,python 实现matlab左除
  8. Java中 LocalDate、LocalTime、LocalDateTime三个时间工具类的使用介绍
  9. sublime 设置自动更新_Win10关闭自动更新的三种方法
  10. 优秀!26岁任985大学博导!
  11. Compose的手势(六)
  12. Spring源码分析三:Bean标签解析之BeanDefinition
  13. 每一个都能笑抽的 39 个奇葩代码注释
  14. php和stm32,【STM32H7教程】第5章 STM32H7下载和调试方法(MDK5)
  15. LoRa及LoRaWAN简介
  16. excel整行删除,图片一起删除
  17. 关于华为的GaussDB数据库。下载,资料获取,开源社区等等
  18. while、do...while、for循环的使用
  19. Android11 读写权限申请
  20. systemc学习资料

热门文章

  1. Redis高级项目实战,适合java开发的笔记本电脑
  2. Android 实现简单的帧动画
  3. 进程间通信(IPC):管道(Pipe)
  4. CSS3之动画模块实现轮播图
  5. 图像去噪简单介绍—并给出示例代码
  6. 在 FEKO 的 CADFEKO 中创建弧线的方法
  7. 国内IT软件外包公司汇总(2023 最新版)
  8. 求职者说:成功应聘华为后的总结
  9. 国产蓝牙耳机哪个品牌好?2021口碑最好的几款国产蓝牙耳机
  10. C++ 读取asar中的文件