spring aop概念及实战示例

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: java中,每个类对于都是一个闭合的实体,在编程中有时候需要在已经开发完成的类中通过一项技术嵌入一些公用的方法,这项技术不用改变原代码。而这项技术就是面向切面编程,也就是aop。

一、 什么是aop
百度的解释:在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

我的个人理解:java中,每个类对于都是一个闭合的实体,在编程中有时候需要在已经开发完成的类中通过一项技术嵌入一些公用的方法,这项技术不用改变原代码。而这项技术就是面向切面编程,也就是aop。

二、 aop中的一些概念
了解了aop是什么之后,我们再看一下aop中有哪些东西:

1、切面(Aspect)
切面对于aop来说是一个类,这个类封装了嵌入到目标方法时,一些相关信息。

2、连接点(join point)
这个点就是所有在程序中明确定义的点,如方法调用,对类成员的访问以及异常处理程序块的执行等等。

3、切点(pointcut)
定义了一组有特殊修饰的连接点的规则,这些规则可以是正则、通配符等。

4、通知(advice)
在切点中需要执行的业务逻辑操作。

上述概念比较模糊,我们通过一些例子来类比一下:比如,我们去商场买衣服的时候,我们不知道哪些合适,所以我们把我们的身高体重跟导购说了之后,导购根据这些信息,给你找出来一些衣服试穿。这个例子中,切面(Aspect)就相当于我们去商场买衣服这个事件,连接点(join point)相当于商店中的所有衣服,而切点(pointcut)就是我们的身高体重,通知(advice)就是导购找到衣服之后给我们试穿。这个例子可能不太准确,但是差不多就这个意思。

三、利用aop实现项目中日志的嵌入
通常我们在项目中需要用到日志,日志用aop是怎么实现的呢?

1、首先在pom文件中引入依赖:

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>


2、创建个切面类
image.png

3、在切面类中编写切点和通知
/**

  • @description 切点

*/
@Pointcut("@annotation(com.zyjournals.web.journaladmin.config.annotation.ArticleProcessLogAnn)")
public void pointCutMethod(){

}

/**

  • @description 通知

*/
@Before("pointCutMethod()")
public void doBefore(JoinPoint joinPoint){

System.out.println("方法执行前");

}
4、编写测试类
package com.yangkun.esstudy.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/log")
public class LogTestController {

@GetMapping("test")
public String test(){
    return "hello world";
}

}
5、测试结果
image.png 切入成功!

思考
aop面向切面编程,其实就是一个切面中包含的切点(寻找符合规则的连接点切入)和执行动作(通知),在找到符合的切点之后,根据通知的类型(前置通知、后置通知、环绕通知等)执行通知的业务逻辑,从而实现业务代码中嵌入log日志等与业务无关的代码逻辑。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
XML Java 数据安全/隐私保护
Spring Aop该如何使用
本文介绍了AOP(面向切面编程)的基本概念和术语,并通过具体业务场景演示了如何在Spring框架中使用Spring AOP。文章详细解释了切面、连接点、通知、切点等关键术语,并提供了完整的示例代码,帮助读者轻松理解和应用Spring AOP。
Spring Aop该如何使用
|
1月前
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
59 5
|
1月前
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
68 8
|
1月前
|
Java 开发者 Spring
Spring AOP 底层原理技术分享
Spring AOP(面向切面编程)是Spring框架中一个强大的功能,它允许开发者在不修改业务逻辑代码的情况下,增加额外的功能,如日志记录、事务管理等。本文将深入探讨Spring AOP的底层原理,包括其核心概念、实现方式以及如何与Spring框架协同工作。
|
1月前
|
XML 监控 安全
深入调查研究Spring AOP
【11月更文挑战第15天】
46 5
|
1月前
|
Java 开发者 Spring
Spring AOP深度解析:探秘动态代理与增强逻辑
Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
46 4
|
1月前
|
安全 Java 开发者
AOP中的JDK动态代理与CGLIB动态代理:深度解析与实战模拟
【11月更文挑战第21天】面向切面编程(AOP,Aspect-Oriented Programming)是一种编程范式,它通过将横切关注点(cross-cutting concerns)与业务逻辑分离,以提高代码的可维护性和可重用性。在Java开发中,AOP的实现离不开动态代理技术,其中JDK动态代理和CGLIB动态代理是两种常用的方式。本文将从背景、历史、功能点、业务场景、底层逻辑等多个维度,深度解析这两种代理方式的区别,并通过Java示例进行模拟和比较。
72 4
|
2月前
|
存储 缓存 Java
Spring高手之路23——AOP触发机制与代理逻辑的执行
本篇文章深入解析了Spring AOP代理的触发机制和执行流程,从源码角度详细讲解了Bean如何被AOP代理,包括代理对象的创建、配置与执行逻辑,帮助读者全面掌握Spring AOP的核心技术。
55 3
Spring高手之路23——AOP触发机制与代理逻辑的执行
|
1月前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
40 1
|
2月前
|
自然语言处理 Java API
Spring Boot 接入大模型实战:通义千问赋能智能应用快速构建
【10月更文挑战第23天】在人工智能(AI)技术飞速发展的今天,大模型如通义千问(阿里云推出的生成式对话引擎)等已成为推动智能应用创新的重要力量。然而,对于许多开发者而言,如何高效、便捷地接入这些大模型并构建出功能丰富的智能应用仍是一个挑战。
301 6