持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
Spring AOP 概念的引入
在软件开发的过程中,我们力求寻找“更简单、更高效”的开发模式,于是我们的开发角度从面向过程转向了面向对象。
面向对象编程(OOP)其实可以解决大部分的业务需求。但是在实际开发中,我们不仅仅需要应对业务方面的工作,还需要很多的系统需求。如:打日志、安全检查等等。
在面向对象的开发需求的时候,我们可以很容易地完成“一对一”的业务抽象及模块化。比如说我想开发一个图书管理系统。针对图书,我们可以将其抽象成一个对象;针对工作人员、借阅者、图书馆等等,我们都可以将其分别抽象成一个个对象。也可以说,一个功能对应于一个对象模型,所以称其为“一对一”。
但是在实际工作中,我们不仅仅需要面对业务方面的事情,还需要一些“系统”方面的需求,就像上文说的“打日志、安全检查、监控”等等。
但是我们可以想象一下,虽然这些系统需求很明确,但是如果用面向对象的方式实现起来,就不是一个需求对应一个实现这么容易了。比如说要向系统中新增打日志的功能,那么就需要将相同的打日志逻辑都添加到系统中所有的需要打日志的对象中去,即遍布所有业务对象。随着系统的功能的逐渐增多,我们会发现这部分代码冗余实在是过分。同时,如果有一点改动的地方,就要改动许多未知,这无疑给开发及维护带来了很大的工作量及风险。
对于我们系统中的业务模块,OOP 可以很好地将其分解并对其进行模块化处理;但是对于这种系统需求,OOP 就没有办法解决这种在系统中散落各处的相同的逻辑的问题了。
于是,AOP 的概念就被开发者发明了。AOP 的全程是Aspect-Oriented Programming,中文翻译有很多,最常用的就是“面向切面编程”。使用面向切面编程,我们可以对一些系统类的需求,如安全验证、日志打印进行模块化的组织。
总结
这篇文章我们主要目的就是基于OOP 来引出AOP。让读者明白OOP 的一些不足之处以及开发者的解决之道。