开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天
如何理解面向切面编程(AOP)?
AOP是Spring的重要特性,AOP是通过预编译方式和运行期间动态代理实现程序功能,也就是说可以在不修改源代码的情况下,给程序统一添加功能
AOP全称是Aspect Oriented Programming,即面向切面编程。和OOP(面向对象编程)不同,AOP主张将程序中相同的业务逻辑进行横向隔离(解耦合),并将重复的业务逻辑抽取到一个独立的模块中,以达到提高程序可重用性和开发效率的目的。
在传统的业务处理代码中,通常都会进行事务处理、日志记录等操作。虽然使用OOP可以通过组合或者继承的方式来达到代码的重用,但如果要实现某个功能(如日志记录),同样的代码仍然会分散到各个方法中。
比如在OOP中,我们会通过继承来实现代码重用,但仍需在子类中进行重写,代码仍然会分散到子类文件中,如果我们需要改动参数信息,仍然要去不同的文件中进行多次修改,导致可维护性很差
例:
比如我们开发的系统中有三个功能,分别是:
- 添加订单
- 更新订单
- 删除订单
而在每个功能模块中,都有一个相同的记录日志方法,如果我们将记录日志方法分别写在三个功能方法中,则会显得冗余,当要修改时也需要修改三次
所以我们这里将记录日志的方法抽出来,单独做成一个方法模块,应用了面向切面编程技术后,我们可以和依赖注入一样,通过配置文件为其添加关联,三个功能与记录日志方法在代码层面并没有掺和在一起,而是在程序运行时将其在内存中拼合起来。
就相当于三个功能是相互无关的,而记录日志是一个切面,横切三个功能,在需要执行切面功能的那行切入进去,三个功能均可调用这个切面功能,但四者的代码相互无关,达到了解耦的目的。
不修改源代码,在运行期间为其动态添加功能,这就是AOP