浅谈 AOP 什么是 AOP ?
前言
本文以文字为主题,并没有代码案例,仅限于记录自己对于 AOP 的理解,文中也啥特别高深的东西,大牛和大佬可以忽略本文
Aspect Oriented Programming 简称 “AOP”,大家都知道 AOP 是面向切面编程,但是具体什么是 AOP 呢?他是干什么的?什么作用?为什么要用 AOP?本文的目的就是由浅入深的去分析一下 AOP 的具体作用!
什么是 AOP ?
AOP 是通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术(来源于百度百科)
在维基百科中 AOP 又被译作“面向方面的程序设计、剖面导向程序设计”,是计算机科学中的一种程序设计思想。其作用是为了提高程序代码的模块化程度,通过在现有代码基础上增加额外的通知(Advice)机制,能够对被声明为“切点(Pointcut)”的代码块进行统一管理与装饰,并且将横切关注点与业务主体进行进一步分离,同时又不降低业务代码的可读性。【注意以上标记内容,后面会解释什么是:切点,通知和横切关注点】
拓展话题
通俗的理解就是:相当于在原有基础的功能上,通过 AOP 添加新的功能,例如:我买了一个笔记本,这个笔记本已经自带一个键盘,但是我觉得这个自带键盘的不好用或者我用不习惯,然后我又新买了一个机械键盘,使用新的机械键盘去工作,这个新的机械键盘就相当于我用 AOP 去添加的新功能
AOP 核心思想是什么?
降低业务逻辑之间的的耦合性,提高程序的可重用性(这是百度百科的官方解释)
我个人理解更偏向于:保证程序原业务逻辑的基础上增加更多的可读性,例如使用 AOP 添加的日志系统,是为了方便后续程序中问题的监控和排查等(纯属个人观点,但是确实是这么个作用)
以下内容属于拓展话题,主要是对一些名词的介绍和一些自己的理解,来源于“百度百科”和“维基百科”和“其他资料”统计
什么是横切关注点
“横切关注点”其实还有一个小伙伴叫做“关注点”,我理解的是“横切关注点”是由“关注点”分离出来的,“关注点”与“横切关注点”的区别如下所示
关注点:相当于只应用一个模块的内容,例如:在用户模块监控用户是否登录,但是用户做了其他操作则监控不到
横切关注点:就是在程序代码中的数个模块或者多个模块中都有出现,白话理解就是:日志系统在全局应用,无论你是用户模块,商品模块还是订单模块,你做的任何行为都会被日志系统记录
横切的意思就是:横跨系统中的每个业务模块
什么是切点?什么是通知?
说道切点和通知就不得不再多补充一个知识点了,那就是连接点,这三个一体组成了一个连接点模型(JPM)
例如你去银行取钱,然后取出来钱之后,银行账户给你发送了一个短信,这个时候,发送短信这个功能就是由(AOP 来实现的),那么怎么让 AOP 的短信功能和银行连接起来,这就要用到我们的“连接点”了
1.连接点:的作用就相当于是什么时候通知短信可以发送,有很多的 AOP 实现支持方法执行和字段引用作为连接点
2.切点:就是用来规定(或量化)连接点的方式,切点确定是否匹配一个给定连接点
3.通知:就是指定在连接点要运行的代码的手段,可以在连接点之前、之后和周围运行
AOP 优势?(其实上边已经包含了 AOP 的各种优势)
总结来讲其实就以下四点内容
1.降低模块之间的耦合度
2.使系统容易扩展
3.更好的代码复用
4.使代码有更好的可读性和易于维护
总结
我个人感觉讲到这个地方,你应该心里对于 AOP 有一个大概的了解了,不能说能百分百理解其中所有的意思,但应该最起码知道 AOP 是干什么的了,以及 AOP 的一些作用和应用
AOP 的应用场景更多偏向于程序中的日志记录,性能统计,安全控制,事务处理,异常处理等等,我个人理解 AOP 更像你玩游戏时用到的加速器,提供的一些辅助游戏的功能
浅谈 AOP 什么是 AOP ?相关推荐
- 浅谈 Spring IOC和AOP
浅谈 Spring IOC和AOP IOC 控制反转 以前创建对象的主动权和时机是由于自己把握的,现在将这种权利转移到Spring容器中,并且根据配置文件去创建对象管理对象 ioc的注入方式有三种:构 ...
- 浅谈Spring框架AOP概念
何为AOP? AOP(Aspect Oriented Programming,面向切面编程):AOP是一种新的方法论,在这之前相信我们都听过面向对象编程(OOP),AOP就是对OOP的补充,它们的关系 ...
- java dao service实例_浅谈Action+Service +Dao 功能
1. Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. D ...
- 由openSession、getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持
由openSession.getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持 Spring和Hibernate的集成的一个要点就是对事务的支持,op ...
- 编程浅谈-以一个初出茅庐的Java程序员视角
编者是一个从事Java开发的普通软件攻城狮,迄今为止,粗粗算来不过刚刚进入编程的世界不过两年,但在这两年的光阴里,每当我抬头仰望星空(苦命加班)时脑海里总有这样一个疑问--"什么是编程&qu ...
- 浅谈Spring IOC的理解
浅谈Spring IOC的理解 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊 ...
- 浅谈全局视角下的设计模式
写在前面: 以下内容,更多的是自己的思考总结,不可避免出现有争议的地方,请谨慎食用. 浅谈全局视角下的设计模式 1.业务开发经常使用的设计模式有哪些? 2.为什么有些设计模式不常见呢? 3.为什么这些 ...
- 浅谈对java编程思想的理解
浅谈对java编程思想的理解 刚从学校毕业的时候,对于这种概念的理解少之又少 ,只是单纯的从事编码工作,理解也只是停留在对java基本概念的使用上,很局限!随后工作了快三年的时间里,自己不断的理解这种 ...
- 浅谈Android中的MVP与动态代理的结合
浅谈Android中的MVP与动态代理的结合 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 在Android开发平台上接触MVP足足算起来大概已经有一个年头左右.从最开始到现在经 ...
- 浅谈Spring的Bean生命周期和作用域
学习spring有一段时间了.有的人说Spring的发展就是Java的发展,Spring就是Java的半壁江山,而且AOP思想更是OOP思想的一种扩展和延申.所以今天来浅谈一下spring的生命周期和 ...
最新文章
- PYTHON2.day03
- sql附加服务器数据库文件夹,快速开发平台企业版--后台SqlServer更换服务器,可以用数据库分离与附加方法重新启动...
- python数据分析方法和命令_《利用Python进行数据分析》 —— (1)
- Bootstrap教程:学习构建第一个Bootstrap 4网站
- java mysql unix_timestamp_MySQL unix_timestamp()函数
- 中低频量化交易策略研发06_推进的择时策略
- 普通人学python有意义吗-为什么那么多自学Python的后来都放弃了,总结起来就这些原因...
- 深入浅出 CAS,很多想进阿里的倒在了这个知识点
- html文件 保持在,如何保持.phtml文件的简洁和整洁?
- 被低估的电池管理系统BMS
- sqlserver恢复已经删除的表记录
- 解决:Windows打开文件时选择打开方式-》选择其他应用-》时出现无效应用。
- 投入产出表之直接消耗系数和完全消耗系数计算--基于Excel
- 信用风险频发背后:11月约600亿信用债发行取消
- 坚持平凡 创造非凡
- 微信 “空白昵称” 新方法来啦!
- 五大移动GPU厂商论剑
- 算法编程例题——枚举法
- p4vasp分析态密度输出pdos数据后用Python分列
- fread读取文件丢失字节