作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者!
个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏
当前专栏:Spring5应用专栏_Aomsir的博客
前言
在之前的文章中,我们逐步揭示了静态代理
、AOP的动态代理
、额外功能
以及切入点
等关键概念。通过这些篇章,我们逐渐探究了AOP的四步编程方法,然而,对于AOP的整体概念,我们尚未完全涉猎。继之前的AOP实战经验后,从本篇开始,我将深入带领大家探索和理解AOP的核心思想,希望能助大家在面试或实际应用中更为自信,从众多候选者中脱颖而出
AOP概念
学过C语言的朋友都知道,它主要采用的是面向过程的编程方式,即POP (Procedure Oriented Programming)
。而Java,则是一门面向对象的编程语言,即OOP (Object Oriented Programming)
。而AOP (Aspect Oriented Programming)
,则代表了面向切面的编程。
那么,这三者具体是什么呢?
- OOP (Object Oriented Programming):它的核心是将真实世界的事物抽象成对象,以对象为基本单位进行程序开发。对象之间可以彼此交互、协同工作,从而完成整个程序的构建。OOP强调数据和处理数据的方法的封装。
- POP (Procedure Oriented Programming):这是一种以函数或过程为基本单位的程序开发方法。它更关注的是程序执行的流程,而不是数据的封装。在这种方法中,数据通常是通过函数参数传递的,程序由一系列函数调用构成。
- AOP (Aspect Oriented Programming):AOP为我们提供了一种全新的视角,允许我们定义
横切关注点
,即在多个对象中都可能出现的公共功能(如日志、安全等)
。AOP使这些横切关注点与主业务逻辑分离,从而提高代码的可重用性和维护性
切面
切面(Aspect)是面向切面编程(AOP)中的核心概念,它由切入点(Pointcut)和额外功能(Advice)构成。拿Spring的AOP动态代理为例,其核心的组装步骤正是这样的切入点和额外功能的结合。这种结构模式为我们提供了一种机制,通过代理类来为原始类附加额外功能,而不需要修改原始类的代码。
这样,Spring的AOP动态代理实质上是面向切面的编程的实现。其主要优势在于,增强的功能被分离,使得原始类的维护更为简单和清晰。
然而,需要强调的是,尽管AOP提供了一种新的编程范式,它并不意图取代传统的面向对象编程(OOP)。相反,AOP旨在作为OOP的一个补充,帮助我们更高效地处理横切关注点,进而提升代码的整洁度和可维护性
开发步骤
- 原始类与方法
- 额外功能(实现MethodInterceptor)
- 切入点定义
- 组装切面
总结
经过本篇的深入探讨,我们更为清晰地理解了面向过程编程、面向对象编程以及面向切面编程这三大编程范式。特别地,我们对AOP有了更加全面的把握,从其核心概念、构成要素,到其在Spring中的实际应用与实现。值得注意的是,AOP并不旨在取代传统的OOP,而是提供一种更为灵活、高效的编程方式,使我们能更加轻松地处理共通关注点,优化代码结构。通过整合原始类、额外功能、切入点定义及切面的组装,我们看到了AOP的强大与魅力,期望这些知识能助大家在实际开发中实现更加简洁、高效的代码
参考文献
- 孙哥孙帅suns说Spring5~学不会Spring? 因为你没找对人
- Spring官方文档