说说什么是 AOP?

说说什么是 AOP?
AOP:面向切面编程。简单说,就是把一些业务逻辑中的相同的代码抽取到一个独立的模块中,让业务逻辑更加清爽。
具体来说,假如我现在要 crud 写一堆业务,可是如何业务代码前后前后进行打印日志和参数的校验呢?
我们可以把日志记录
和数据校验
可重用的功能模块分离出来,然后在程序的执行的合适的地方动态地植入这些代码并执行。这样就简化了代码的书写。
业务逻辑代码与通用逻辑代码分离,使业务模块更简洁。这种分离提高了代码的可维护性和升级性,并降低了业务逻辑与通用逻辑之间的耦合性。
AOP(面向切面编程)可以将遍布应用各处的功能分离出来,形成可重用的组件。它能在编译期、装载期或运行期给程序动态添加功能,而无需修改源代码。这样就实现了对业务逻辑的隔离,提高了代码的模块化能力。
AOP的核心概念包括:
- 切面(Aspect):对横切关注点的抽象表示。
- 连接点(Joinpoint):被拦截的点,通常指被拦截的方法,也可以是字段或构造器。
- 切点(Pointcut):对连接点的定位和拦截条件的描述。
- 通知(Advice):拦截到连接点后要执行的代码,也称为增强。
- 目标对象(Target):被代理的目标对象。
- 织入(Weaving):将增强添加到目标类的具体连接点上的过程。
织入可以在编译期、类加载期或运行期进行。Spring AOP采用的是运行期织入,通过为目标对象动态创建代理对象来实现。
此外,还有引介(Introduction)这一特殊的增强类型,可以动态地为类添加属性和方法。
AOP提供了多种环绕方式,包括前置通知(@Before)、返回通知(@AfterReturning)、异常通知(@AfterThrowing)、后置通知(@After)和环绕通知(@Around)。在多个切面存在的情况下,可以使用@Order指定它们的执行顺序,数字越小,优先级越高。