AOP学习

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: AOP学习

AOP (Aspect Oriented Programming) 是面向切面编程的缩写,它是一种编程范式,在这种范式中,程序内的关注点被分解为许多可重用的单元,这些单元称为切面。AOP 可以帮助我们更好地设计和管理复杂的软件系统,它可以让我们将重复的代码从应用程序中抽象出来,从而提高软件的可重用性和可维护性。

在应用 AOP 的过程中,我们通常会用到以下几个概念:

切面 (Aspect):用于横切关注点的模块化单元。

连接点 (Join Point):程序执行过程中的特定点,例如调用方法、异常抛出等。

切点 (Pointcut):一系列的连接点的集合,可以通过指定类名、方法名等方式确定。

通知 (Advice):为应对某个切点而执行的一段代码,它包括前置通知、后置通知、异常通知、最终通知、环绕通知等几种类型。

引入 (Introduction):在不修改现有类结构的情况下,为类添加新的属性或方法等。

在 Spring 中,我们可以使用 AOP 对容器中的 bean 进行增强处理,Spring AOP 基于代理模式实现,它通过在原有的子类或代理对象上织入 AOP 切面来实现增强。Spring AOP 提供了两种代理方式:JDK 动态代理和 CGLIB 代理。

下面是一个简单的 Spring AOP 的例子,假设我们有一个 service 类,我们希望在其中的某个方法调用前后添加日志输出和异常处理逻辑。我们可以使用 AOP 来实现这个目标:

@Service

public class MyService {

   public void myMethod() {

       // ...

   }

}

@Aspect

@Component

public class MyAspect {

   @Before("execution(* com.example.MyService.myMethod(..))")

   public void beforeMethod(JoinPoint joinPoint) {

       // 日志输出

   }

   @AfterReturning("execution(* com.example.MyService.myMethod(..))")

   public void afterMethod(JoinPoint joinPoint) {

       // 日志输出

   }

   @AfterThrowing("execution(* com.example.MyService.myMethod(..))")

   public void afterThrowing(JoinPoint joinPoint, Throwable ex) {

       // 异常处理

   }

}

在这个例子中,我们创建了一个名为 MyAspect 的切面,并在其中定义了三个通知:

beforeMethod 和 afterMethod 用于分别在方法调用前和调用后输出日志。

afterThrowing 用于在方法抛出异常时执行异常处理逻辑。

最后,我们需要将 MyAspect 注入到 Spring 容器中,并在目标类(在本例中是 MyService)上添加 @Profile 注解,指定要增强的方法名和参数列表。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
负载均衡 Java 应用服务中间件
学习aop以及nginx
学习AOP和Nginx的最好方式是通过实践。你可以尝试在你的项目中使用这些技术,或者找一些在线教程进行学习。
30 1
|
5月前
|
XML Java 数据格式
Spring5系列学习文章分享---第三篇(AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式))
Spring5系列学习文章分享---第三篇(AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式))
50 0
|
6月前
|
Java Maven 数据安全/隐私保护
代码优雅升级,提升开发效率:挖掘Spring AOP配置的学习宝藏!
代码优雅升级,提升开发效率:挖掘Spring AOP配置的学习宝藏!
|
XML Java 数据格式
Spring5学习(七):注解方式进行AOP操作 及 多种通知类型的测试
先来介绍一下AOP操作中的几个术语: 1、连接点:指类里面可以被增强的方法 2、切入点:指实际被增强的方法 3、通知:指实际增强的逻辑部分 4、切面:把通知应用到切入点的过程
104 0
Spring5学习(七):注解方式进行AOP操作 及 多种通知类型的测试
|
XML Java 数据格式
spring aop学习
​1.aop和spring aop的关系? aop是一种思想,spring aop是aop的一种实现。 2.Spring aop和AspectJ的关系? 这两种都是实现aop的
92 0
|
XML 缓存 Java
Spring AOP注解的学习与实践
使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
135 0
Spring AOP注解的学习与实践
|
Java 微服务 Spring
【学习Seata1.6源码#02】通过Spring AOP 实现声明式事务机制
【学习Seata1.6源码#02】通过Spring AOP 实现声明式事务机制
448 0
|
XML Java 数据格式
|
XML Java Maven
详解Spring学习总结——Spring实现AOP的多种方式
详解Spring学习总结——Spring实现AOP的多种方式
详解Spring学习总结——Spring实现AOP的多种方式
|
Java Spring
Spring AOP源码学习:创建 AOP 代理
在上篇文章中Spring AOP:AOP 注解的解析,我们解析了AOP 注解,并注册了一个重要的 bean:AnnotationAwareAspectJAutoProxyCreator,AspectJ 方式的 AOP 的重要内容都在这个类里面,本文将详细介绍这个类及其相关方法。
219 0