本文以文字为主题,并没有代码案例,仅限于记录自己对于 AOP 的理解,文中也啥特别高深的东西,大牛和大佬可以忽略本文
Aspect Oriented Programming 简称 “AOP”,大家都知道 AOP 是面向切面编程,但是具体什么是 AOP 呢?他是干什么的?什么作用?为什么要用 AOP?本文的目的就是由浅入深的去分析一下 AOP 的具体作用!
AOP 是通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术(来源于百度百科)
在维基百科中 AOP 又被译作“面向方面的程序设计、剖面导向程序设计”,是计算机科学中的一种程序设计思想。其作用是为了提高程序代码的模块化程度,通过在现有代码基础上增加额外的通知(Advice)机制,能够对被声明为“切点(Pointcut)”的代码块进行统一管理与装饰,并且将横切关注点与业务主体进行进一步分离,同时又不降低业务代码的可读性。【注意以上标记内容,后面会解释什么是:切点,通知和横切关注点】
通俗的理解就是:相当于在原有基础的功能上,通过 AOP 添加新的功能,例如:我买了一个笔记本,这个笔记本已经自带一个键盘,但是我觉得这个自带键盘的不好用或者我用不习惯,然后我又新买了一个机械键盘,使用新的机械键盘去工作,这个新的机械键盘就相当于我用 AOP 去添加的新功能
降低业务逻辑之间的的耦合性,提高程序的可重用性(这是百度百科的官方解释)
我个人理解更偏向于:保证程序原业务逻辑的基础上增加更多的可读性,例如使用 AOP 添加的日志系统,是为了方便后续程序中问题的监控和排查等(纯属个人观点,但是确实是这么个作用)
以下内容属于拓展话题,主要是对一些名词的介绍和一些自己的理解,来源于“百度百科”和“维基百科”和“其他资料”统计
“横切关注点”其实还有一个小伙伴叫做“关注点”,我理解的是“横切关注点”是由“关注点”分离出来的,“关注点”与“横切关注点”的区别如下所示
关注点:相当于只应用一个模块的内容,例如:在用户模块监控用户是否登录,但是用户做了其他操作则监控不到
横切关注点:就是在程序代码中的数个模块或者多个模块中都有出现,白话理解就是:日志系统在全局应用,无论你是用户模块,商品模块还是订单模块,你做的任何行为都会被日志系统记录
横切的意思就是:横跨系统中的每个业务模块
说道切点和通知就不得不再多补充一个知识点了,那就是连接点,这三个一体组成了一个连接点模型(JPM)
例如你去银行取钱,然后取出来钱之后,银行账户给你发送了一个短信,这个时候,发送短信这个功能就是由(AOP 来实现的),那么怎么让 AOP 的短信功能和银行连接起来,这就要用到我们的“连接点”了
1.连接点:的作用就相当于是什么时候通知短信可以发送,有很多的 AOP 实现支持方法执行和字段引用作为连接点
2.切点:就是用来规定(或量化)连接点的方式,切点确定是否匹配一个给定连接点
3.通知:就是指定在连接点要运行的代码的手段,可以在连接点之前、之后和周围运行
总结来讲其实就以下四点内容
1.降低模块之间的耦合度
2.使系统容易扩展
3.更好的代码复用
4.使代码有更好的可读性和易于维护
我个人感觉讲到这个地方,你应该心里对于 AOP 有一个大概的了解了,不能说能百分百理解其中所有的意思,但应该最起码知道 AOP 是干什么的了,以及 AOP 的一些作用和应用
AOP 的应用场景更多偏向于程序中的日志记录,性能统计,安全控制,事务处理,异常处理等等,我个人理解 AOP 更像你玩游戏时用到的加速器,提供的一些辅助游戏的功能