什么是AOP?
- AOP英文全称:Aspect Oriented Programming(面向切面编程、面向方面编程)
- 面向切面编程其实就是面向特定方法编程
下面我们通过一个开发中的应用场景,来说明下AOP的好处。
在我们的项目当中开发了很多的功能,然而有一些功能运行的速度比较慢,现在我需要来优化这个项目。首先第一步就需要定位出执行耗时比较长的业务方法,再针对于业务方法再来进行优化。此时我们就需要统计当前这个项目当中每一个业务方法的执行耗时。那么统计每一个业务方法的执行耗时该怎么实现?
可能多数人首先想到的就是在每一个业务方法运行之前,记录这个方法运行的开始时间。在这个方法运行完毕之后,再来记录这个方法运行的结束时间。拿结束时间减去开始时间,不就是这个方法的执行耗时吗?
以上分析的实现方式是可以解决需求问题的。但是对于一个项目来讲,里面会包含很多的业务模块,每个业务模块又包含很多增删改查的方法,如果我们要在每一个模块下的业务方法中,添加记录开始时间、结束时间、计算执行耗时的代码,就会让程序员的工作变得非常繁琐。
而Spring提供的面向方法编程(AOP),就可以做到在不改动这些原始方法的基础上,针对方法进行功能的增强。
AOP的作用:在程序运行期间在不修改源代码的基础上对已有方法进行增强(无侵入性: 解耦)
我们要想完成统计各个业务方法执行耗时的需求,我们只需要定义一个模板方法,将记录方法执行耗时这一部分公共的逻辑代码,定义在模板方法当中,在这个方法开始运行之前,来记录这个方法运行的开始时间,在方法结束运行的时候,再来记录方法运行的结束时间,中间就来运行原始的业务方法。
通过以上分析对比可以发现:基于AOP面向方法编程的这种方式更加简单,更加优雅。
AOP的优势:
- 减少重复代码
- 提高开发效率
- 维护方便
AOP面向切面编程和OOP面向对象编程一样,它们都仅仅是一种编程思想。而Spring的AOP是Spring框架的高级技术,旨在管理bean对象的过程中底层使用动态代理机制,对特定的方法进行编程(功能增强)。
结论:面向切面编程这种思想最主流的实现方式是利用动态代理技术。