如何理解面向切面编程中的切面?
在学习 Spring 中,有一个很重要的内容就是 AOP,面向切面编程。
- 很多人疑惑为什么叫做面向切面?
- 切面是什么意思,切入点是什么意思?
下面我以一种通俗易懂的方式谈谈我的理解。
切面与切入点
切面 = 切入点 + 额外功能。
我们先从几何的角度出发,我们都知道点构成面,任何一个面都是由很多个点构成的,比如桌面是由很多个木头点构成的,而这些木头点都有相同的特性:他们都是木头,如果我们想给这些木头点加一些额外的功能,让他们都变成红色的,只需要用红色的油漆将桌子刷成红色,相当于我们给桌子上的所有的点应用了一个红色的切面,其中红色就是额外功能。
假如现在我们有 3 个类,UserServiceImpl
、OrderServiceImpl
、ProductServiceImpl
。
我们将他们类比成 3 个圆柱体:
- 首先在这些圆柱体上各取一个点:相当于各取类中的一个方法。
- 我们将这些点连起来,由此确定了一个平面:相当于将额外功能同时加到这几个方法上面。
- 这个连起来得到的平面就是切面,切面上的点都附加了额外功能。
如何理解面向切面编程中的切面?相关推荐
- AQS理解之五—并发编程中AQS的理解
AQS理解之五-并发编程中AQS的理解 首先看下uml类图: AbstractOwnableSynchronizer 这个类定义是提供一个创建锁的基础,设置一个排它线程,帮助控制和监控访问. 先看下A ...
- springboot异步和切面_spring中的切面和异步执行
1.首先理解异步和多线程的概念,怎么实现接口的异步调用呢?多线程,这是很多人第一眼想到的关键词,没错,多线程就是一种实现异步调用的方式! 2.下面介绍怎么实现异步调用方式 3.首先如果你的项目是spr ...
- 深入理解python异步编程 中_这篇文章讲得精彩-深入理解 Python 异步编程(上)!
可惜,二和三现在还没有出来~ ~~~~~~~~~~~~~~~~~~~~~~~~~ http://python.jobbole.com/88291/ ~~~~~~~~~~~~~~~~~~~~~~~~~~ ...
- java 用面向接口编程的方式开发打印机_Java“打印机”模型理解面向接口编程。实现接口定义类,接口实现类,核心“业务”类分离...
接口定义类 IinkBox.java package printerDemo.iface; public interface IInkBox { public String getColor(); } ...
- 我的控制反转,依赖注入和面向切面编程的理解
感谢http://blog.xiaohansong.com/2015/10/21/IoC-and-DI/ 的供图 1.什么是控制? 如下图所示,我们看到了 软件系统中 对象的 高耦合现象.全体齿轮的转 ...
- Spring面向切面编程(AOP)详解
Spring面向切面编程(AOP)详解 面向切面编程(AOP)是Spring框架的另外一个重要的核心内容. 而在讲AOP之前,先来了解一下动态代理这个概念,因为AOP基于动态代理. 动态代理概念:在程 ...
- Autofac的切面编程实现
面向切面编程:Autofac.Annotation扩展组件是我开源的一款利用打标签完成autofac容器的注入组件. https://github.com/yuzd/Autofac.Annotatio ...
- Aop切面编程原理和Spring实现
Aop切面编程概念 AOP切面编程一般可以帮助我们在不修改现有代码的情况下,对程序的功能进行拓展,往往用于实现 日志处理,权限控制,性能检测,事务控制等 AOP实现的原理就是动态代理,在有接口的情况下 ...
- YII2集成GOAOP,实现面向方面编程!
引言: 软件开发的目标是要对世界的部分元素或者信息流建立模型,实现软件系统的工程需要将系统分解成可以创建和管理的模块.于是出现了以系统模块化特性的面向对象程序设计技术.模块化的面向对象编程极度地提高了 ...
最新文章
- android服务器压力测试,Android压力测试Monkey工具
- java redis缓存工具类_util: 对日常工作中常见的工具类进行打包:
1、数据库:DBUtil工具类
2、Redis缓存:JedisUtil工具类...
- 接口应用之“静态代理”
- C/C++中MySQL环境配置教程
- 【英语学习】【Level 08】U03 My Choice L5 The star that shines the brightest
- 通过复制oracle软件方式安装oracle数据库
- matlab左除怎么输入法,python 实现matlab左除
- Java中 LocalDate、LocalTime、LocalDateTime三个时间工具类的使用介绍
- sublime 设置自动更新_Win10关闭自动更新的三种方法
- 优秀!26岁任985大学博导!
- Compose的手势(六)
- Spring源码分析三:Bean标签解析之BeanDefinition
- 每一个都能笑抽的 39 个奇葩代码注释
- php和stm32,【STM32H7教程】第5章 STM32H7下载和调试方法(MDK5)
- LoRa及LoRaWAN简介
- excel整行删除,图片一起删除
- 关于华为的GaussDB数据库。下载,资料获取,开源社区等等
- while、do...while、for循环的使用
- Android11 读写权限申请
- systemc学习资料