AOP(面向切面编程)

aop,面向,切面,编程 · 浏览次数 : 15

小编点评

**AOP(面向切面编程)** **简介:** AOP是一种通过预编译方式和运行期动态代理实现程序功能的技术。它利用面向切面编程的思想,对业务逻辑进行切分,降低业务逻辑的耦合度,提高代码可重用性。 **功能:** * 将业务逻辑各个部分隔离,降低业务逻辑之间的耦合度。 * 提高程序可重用性。 * 提高开发效率。 * 记录性能统计和安全控制事务处理异常处理等功能。 **核心概念:** * **切点(Pointcut):**程序执行某个特定位置的代码段,称为连接点。 * **切面(Aspect):**由切点和增强组成,包含横切逻辑和连接点。 * **增强(Advice):**织入到目标类连接点的代码段,用于描述执行逻辑。 * **引介(lntroduction):**为类添加一些属性和方法,即使业务类原本没有实现某个接口,也可以通过AOP引介功能动态添加接口的实现逻辑。 **编译器织入方式:** * **编译器织入:**在编译器阶段对切面进行处理,将切面织入目标类。 * **类装载器织入:**在运行时加载动态代理生成子类,将切面织入目标类。 * **动态代理织入:**在运行时为目标类添加增强生成子类,动态织入切面。

正文

什么是AOP

AOP(Aspect Oriented Programming,面向切面编程),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

AOP的作用

利用AOP编程可以对业务逻辑的各个部分进行隔离,从而使业务逻辑各部分之间的耦合度降低(低耦合),提高程序的可重用性,提高开发效率。

AOP的功能

  • 日志记录
  • 性能统计
  • 安全控制
  • 事务处理
  • 异常处理
  • 其他功能

AOP专业术语

  • 横切关注点:在软件开发中,分布于应用中多处的功能被称为横切关注点。通常,这些横切关注点从概念上是与应用的业务逻辑分离的(但往往直接嵌入到应用的业务逻辑之中),AOP的目标正是将这些横切关注点与业务逻辑隔离开来。
  • 连接点(Joinpoint):程序执行的某个特定位置〈如类开始初始化前、类初始化后。类某个方法调用前、调用后、方法跑吹异常后)。一个类或一段程序代码拥有一些具有边界性质的特定点,这些代码中的特定点就称为连接点(即插入代码的位置)。

注意: Spring AoP仅支持方法的连接点,即仅能在方法调用前、方法调用后、方法抛出异常时以及方法调用前后这些程序执行点织入增强。

  • 切点(Pointcut):每个类一般都拥有多个连接点(一般一个方法就是一个连接点)。AOP需要定位到特定的连接点,而定位连接点的方式称为切点。连接点相当于数据库中的记录,而切点相当于查询条件,一个切点可以匹配多个连接点。(即插入代码位置的查询条件)。

注意:Spring AOP中切点通过Pointcut接口定义,它使用类和方法作为连接点的查询条件。SpringAOP的规则解析引擎负责解析切点所设定的查询条件,找到对应的连接点。

  • 增强(Advice):增强是织入到目标类连接点上的一段程序代码。在Spring AOP中,增强除用于描述一段程序代码外还拥有另一个和连接点相关的信息-执行点的方位。结合执行点的方位信息和切点信息,AOP就可以找到特定的连接点。因为增强既包括了用于添加到目标连接点上的一段执行逻辑,由包含用于定位连接点的方位信息,所以Spring所提供的增强接口都带有方位名(即插入的代码块)。
  • 引介(lntroduction):引介是一种特殊的增强,它为类添加一些属性和方法。即使一个业务类原本没有实现某个接口,也可以通过AOP引介功能,动态地位该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。
  • 目标对象(Target):它是增强逻辑的织入目标类。通过AOP,业务逻辑类只需要实现非横切逻辑的代码,而性能监视、事务管理等横切逻辑则可以使用AOP动态织入到特定的连接点上。
  • 织入(Weaving):织入是将增强添加对目标类具体连接点上的过程。
  • 切面(Aspect):切面由切点和增强或引介组成。它既包括了横切逻辑的定义,也包括了连接点的定义。
  • 切面=切点+增强((或引介)

注意:Spring AOP负责实施切面的框架,它将切面所定义的横切逻辑织入到切面所指定的连接点中。

AOP织入的的三种方式

  • 编译器织入:要求使用特殊的编译器;
  • 类装载器织入:要求使用特殊的类装载器;
  • 动态代理织入:在运行期为目标类添加增强生成子类的方式。

注意:Spring AOP采用动态代理织入方式。

AOP的优点

  • AOP将横切关注点从主业务逻辑中分离出来,使得代码更加模块化和可维护。通过将横切关注点封装为独立的切面,可以将其在不同的应用程序模块中进行重复使用,避免了代码的重复编写。

  • AOP提供了一种机制,使得横切关注点可以在应用程序的不同部分中进行重用。这样可以减少代码的冗余,提高代码的可重用性,并且在需要修改横切关注点时,只需要修改切面,而无需修改主业务逻辑。

  • AOP通过将横切关注点分离出来,实现了主业务逻辑与横切关注点的解耦。主业务逻辑只需关注核心功能的实现,而不需要关注横切关注点的具体处理逻辑。这样可以提高代码的可维护性,并且方便对横切关注点进行修改和扩展。

  • AOP可以使代码更加简洁和清晰。通过将横切关注点从主业务逻辑中提取出来,主业务逻辑的代码变得更加简单明了,不再混杂着各种横切关注点的处理逻辑。

  • AOP将横切关注点封装为独立的切面,便于管理和维护。当需要修改或调整横切关注点时,只需修改切面的代码,而不需要修改主业务逻辑。这样可以减少错误发生的概率,并且方便对横切关注点进行跟踪和调试。

与AOP(面向切面编程)相似的内容:

AOP(面向切面编程)

AOP(Aspect Oriented Programming,面向切面编程),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

C#特性

目录C#特性1. 概括2. 语法定义特性类应用特性获取特性3. 应用场景数据验证序列化和反序列化描述性元数据依赖注入单元测试权限控制AOP(面向切面编程)总结引用 C#特性 1. 概括 C#中的特性是一种用于向代码元素添加元数据的机制。它们允许程序员在代码中添加额外的信息,以影响程序的行为、编译过程

Rougamo、Fody 实现静态Aop

最近在看项目,看到别人使用Rougamo框架,好奇花了点时间仔细研究了,在这里记录一下。 0. 静态编织 Aop 首先,我们先了解什么是Aop? Aop 是指面向切面编程 (Aspect Oriented Programming),而所谓的切面,可以认为是具体拦截的某个业务点。 我们常用的aop框架

Spring 面向切面编程AOP 详细讲解

1. Spring 面向切面编程AOP 详细讲解 @目录1. Spring 面向切面编程AOP 详细讲解每博一文案2. AOP介绍说明2.1 AOP的七大术语2.2 AOP 当中的 切点表达式3. 使用Spring 对 AOP 的实现使用3.1 准备工作3.2 Spring 基于AspectJ的AO

从XML配置角度理解Spring AOP

本文是全面解析面向切面编程的实践指南。通过深入讲解切面、连接点、通知等关键概念,以及通过XML配置实现Spring AOP的步骤。

深入理解Spring AOP中的@EnableAspectJAutoProxy

本文详细探讨了Spring框架中的面向切面编程(AOP),特别是通过@EnableAspectJAutoProxy注解来启用和配置AOP的详细过程。

Asp-Net-Core开发笔记:使用ActionFilterAttribute实现非侵入式的参数校验

前言 在现代应用开发中,确保API的安全性和可靠性至关重要。 面向切面编程(AOP)通过将横切关注点(如验证、日志记录、异常处理)与核心业务逻辑分离,极大地提升了代码的模块化和可维护性。 在ASP.NET Core中,利用ActionFilterAttribute可以方便地实现AOP的理念,能够以简

Asp .Net Core 系列:基于 Castle DynamicProxy + Autofac 实践 AOP 以及实现事务、用户填充功能

目录什么是 AOP ?.Net Core 中 有哪些 AOP 框架?基于 Castle DynamicProxy 实现 AOPIOC中使用 Castle DynamicProxy实现事务管理实现用户自动填充 什么是 AOP ? AOP(Aspect-Oriented Programming,面向切面

Spring面试攻略:如何展现你对Spring的深入理解

本次面试涉及了Spring框架的多个方面,包括IOC和AOP的理解、Spring容器的启动流程、Bean的创建过程、Bean的线程安全性、循环依赖的处理、事务的处理以及Spring MVC中控制器的线程安全性。通过这些问题的回答,展示了对Spring框架的深入理解和应用经验。同时,也凸显了对面试题目的认真思考和清晰表达的能力。

AOP拦截日志

首先对于AOP切面编程,我也是刚学习,了解不深,这边先引用老张的博客,方便大家学习。 首先想一想,如果有这么一个需求,要记录整个项目的接口和调用情况,当然如果只是控制器的话,还是挺简单的,直接用一个过滤器或者一个中间件,还记得咱们开发Swagger拦截权限验证的中间件么,那个就很方便的把用户调用接口