Spring——AOP基本概念的理解

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Spring——AOP基本概念的理解

文章目录:


1.引子

2.AOP的概念 

2.1 什么是AOP 

2.2 AOP的作用 

2.3 AOP中的编程术语 

2.4 AOP技术思想的实现 

3.使用AspectJ框架实现AOP的基本知识 

3.1 AspectJ的通知类型

3.2 AspectJ的切入点表达式 

1.引子


我们在写代码的时候,肯定都会不断地往代码中增加一些新的内容,也就是说在某些业务方法中增加新的功能。这样就会导致出现一些问题:👇👇👇

1.    源代码可能改动的比较多。

2.    重复代码比较多,造成一定量的代码冗余。

3.    代码难于维护。

所以在这里,就引出了Spring的另一核心技术——AOP

2.AOP的概念


2.1 什么是AOP 

AOPAspect Orient Programming):面向切面编程。面向切面编程是从动态角度考虑程序运行过程。


AOP Aspect Oriented Programming 的缩写,意为:面向切面编程,可通过运行期动态代理实现程序功能的统一维护的一种技术。AOP Spring 框架中的一个重要内容。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。


面向切面编程,就是将交叉业务逻辑封装成切面,利用 AOP 容器的功能将切面织入到主业务逻辑中。所谓交叉业务逻辑是指,通用的、与主业务逻辑无关的代码,如安全检查、事务、日志、缓存等。


若不使用 AOP,则会出现代码纠缠,即交叉业务逻辑与主业务逻辑混合在一起。这样,会使主业务逻辑变的混杂不清。例如,转账,在真正转账业务逻辑前后,需要权限控制、日志记录、加载事务、结束事务等交叉业务逻辑,而这些业务逻辑与主业务逻辑间并无直接关系。但,它们的代码量所占比重能达到总代码量的一半甚至还多。它们的存在,不仅产生了大量的冗余代码,还大大干扰了主业务逻辑---转账。

切面一般都是非业务功能,用来给业务方法增加新的功能,切面一般都是可以复用的。例如:日志功能、事务功能、权限检查、参数检查、统计信息等等。

上图中的日志模块、事务模块就是切面。 


2.2 AOP的作用 

1.    让切面功能复用。

2.    让开发人员专注业务逻辑,提高开发效率。

3.    实现业务功能和其他非业务功能的解耦合。

4.    给存在的业务方法增加功能,无需修改原来的代码。 


2.3 AOP中的编程术语 

1.    Aspect:切面,给业务方法增加到功能。切面泛指交叉业务逻辑。上例中的事务处理、日志处理就可以理解为切
面。常用的切面是通知(Advice)。实际就是对主业务逻辑的一种增强。

2.    JoinPoint:连接点,连接切面的业务方法。连接点指可以被切面织入的具体方法。通常业务接口中的方法均为连接点。

3.    Pointcut:切入点,切入点指声明的一个或多个连接点的集合。通过切入点指定一组方法。被标记为 final 的方法是不能作为连接点与切入点的。因为最终的是不能被修改的,不能被增强的。

4.    Target:目标对象,目标对象指将要被增强的对象。即包含主业务逻辑的类的对象。

5.    Advice:通知,通知表示切面的执行时间,Advice 也叫增强。换个角度来说,通知定义了增强代码切入到目标代码的时间点,是目标方法执行之前执行,还是之后执行等。通知类型不同,切入时间不同。

AOP中重要的三个要素:AspectPointcutAdvice。意思是说:在Advice的时间、在Pointcut的位置,执行Aspect


2.4 AOP技术思想的实现 

对于 AOP 这种编程思想,很多框架都进行了实现。Spring 就是其中之一,可以完成面向切面编程。

然而,AspectJ 也实现了 AOP 的功能,且其实现方式更为简捷,使用更为方便,而且还支持注解式开发。所以,Spring 又将 AspectJ 的对于 AOP 的实现也引入到了自己的框架中。在 Spring 中使用 AOP 开发时,一般使用 AspectJ 的实现方式。

AspectJ是一个优秀面向切面的框架,它扩展了 Java 语言,提供了强大的切面实现。

官网地址:http://www.eclipse.org/aspectj/

AspectJ框架可以使用注解 xml配置文件这两种方式实现AOP

3.使用AspectJ框架实现AOP的基本知识


3.1 AspectJ的通知类型

AspectJ表示切面的执行时间,其中常用的通知有五种类型:(全部是注解,在这里被称为:通知注解)

1.    @Before:前置通知。

2.    @AfterReturning:后置通知。

3.    @Around:环绕通知。

4.    @AfterThrowing:异常通知。

5.    @After:最终通知。


3.2 AspectJ的切入点表达式


AspectJ定义了专门的表达式用于指定切入点。表达式的原型是:👇👇👇

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)

切入点表达式的解释如下:👇👇👇

1.    modifiers-pattern] 访问权限类型

2.    ret-type-pattern 返回值类型

3.    declaring-type-pattern 包名类名

4.    name-pattern(param-pattern) 方法名(参数类型和参数个数)

5.    throws-pattern 抛出异常类型

6.    ?表示可选的部分

execution(访问权限方法返回值方法声明(参数)异常类型):红色部分是必须有的!!!

切入点表达式要匹配的对象就是目标方法的方法名。所以,execution 表达式中明显就是方法的签名。注意,表达式中黑色文字表示可省略部分,各部分间用空格分开。在其中可以使用以下符号:

举例:

1.    execution(public * *(..))  :指定切入点为:任意公共方法。

2.    execution(* set*(..))  :指定切入点为:任何一个以“set”开始的方法。

3.    execution(* com.xyz.service.*.*(..))  :指定切入点为:定义在 service 包里的任意类的任意方法。

4.    execution(* com.xyz.service..*.*(..))  :指定切入点为:定义在 service 包或者子包里的任意类的任意方法。“..”出现在类名中时,后面必须跟“*”,表示包、子包下的所有类。

5.    execution(* *..service.*.*(..))  :指定所有包下的 serivce 子包下所有类(接口)中所有方法为切入点。

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
2月前
|
XML 安全 Java
使用 Spring 的 @Aspect 和 @Pointcut 注解简化面向方面的编程 (AOP)
面向方面编程(AOP)通过分离横切关注点,如日志、安全和事务,提升代码模块化与可维护性。Spring 提供了对 AOP 的强大支持,核心注解 `@Aspect` 和 `@Pointcut` 使得定义切面与切入点变得简洁直观。`@Aspect` 标记切面类,集中处理通用逻辑;`@Pointcut` 则通过表达式定义通知的应用位置,提高代码可读性与复用性。二者结合,使开发者能清晰划分业务逻辑与辅助功能,简化维护并提升系统灵活性。Spring AOP 借助代理机制实现运行时织入,与 Spring 容器无缝集成,支持依赖注入与声明式配置,是构建清晰、高内聚应用的理想选择。
406 0
|
1月前
|
XML Java 数据格式
《深入理解Spring》:AOP面向切面编程深度解析
Spring AOP通过代理模式实现面向切面编程,将日志、事务等横切关注点与业务逻辑分离。支持注解、XML和编程式配置,提供五种通知类型及丰富切点表达式,助力构建高内聚、低耦合的可维护系统。
|
6月前
|
监控 安全 Java
Spring AOP实现原理
本内容主要介绍了Spring AOP的核心概念、实现机制及代理生成流程。涵盖切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)等关键概念,解析了JDK动态代理与CGLIB代理的原理及对比,并深入探讨了通知执行链路和责任链模式的应用。同时,详细分析了AspectJ注解驱动的AOP解析过程,包括切面识别、切点表达式匹配及通知适配为Advice的机制,帮助理解Spring AOP的工作原理与实现细节。
1053 13
|
3月前
|
人工智能 监控 安全
Spring AOP切面编程颠覆传统!3大核心注解+5种通知类型,让业务代码纯净如初
本文介绍了AOP(面向切面编程)的基本概念、优势及其在Spring Boot中的使用。AOP作为OOP的补充,通过将横切关注点(如日志、安全、事务等)与业务逻辑分离,实现代码解耦,提升模块化程度、可维护性和灵活性。文章详细讲解了Spring AOP的核心概念,包括切面、切点、通知等,并提供了在Spring Boot中实现AOP的具体步骤和代码示例。此外,还列举了AOP在日志记录、性能监控、事务管理和安全控制等场景中的实际应用。通过本文,开发者可以快速掌握AOP编程思想及其实践技巧。
|
3月前
|
人工智能 监控 安全
如何快速上手【Spring AOP】?核心应用实战(上篇)
哈喽大家好吖~欢迎来到Spring AOP系列教程的上篇 - 应用篇。在本篇,我们将专注于Spring AOP的实际应用,通过具体的代码示例和场景分析,帮助大家掌握AOP的使用方法和技巧。而在后续的下篇中,我们将深入探讨Spring AOP的实现原理和底层机制。 AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的核心特性之一,它能够帮助我们解决横切关注点(如日志记录、性能统计、安全控制、事务管理等)的问题,提高代码的模块化程度和复用性。
|
3月前
|
设计模式 Java 开发者
如何快速上手【Spring AOP】?从动态代理到源码剖析(下篇)
Spring AOP的实现本质上依赖于代理模式这一经典设计模式。代理模式通过引入代理对象作为目标对象的中间层,实现了对目标对象访问的控制与增强,其核心价值在于解耦核心业务逻辑与横切关注点。在框架设计中,这种模式广泛用于实现功能扩展(如远程调用、延迟加载)、行为拦截(如权限校验、异常处理)等场景,为系统提供了更高的灵活性和可维护性。
|
10月前
|
XML Java 开发者
Spring Boot中的AOP实现
Spring AOP(面向切面编程)允许开发者在不修改原有业务逻辑的情况下增强功能,基于代理模式拦截和增强方法调用。Spring Boot通过集成Spring AOP和AspectJ简化了AOP的使用,只需添加依赖并定义切面类。关键概念包括切面、通知和切点。切面类使用`@Aspect`和`@Component`注解标注,通知定义切面行为,切点定义应用位置。Spring Boot自动检测并创建代理对象,支持JDK动态代理和CGLIB代理。通过源码分析可深入了解其实现细节,优化应用功能。
525 6
|
9月前
|
XML Java 测试技术
Spring AOP—通知类型 和 切入点表达式 万字详解(通俗易懂)
Spring 第五节 AOP——切入点表达式 万字详解!
638 25
|
9月前
|
XML 安全 Java
Spring AOP—深入动态代理 万字详解(通俗易懂)
Spring 第四节 AOP——动态代理 万字详解!
432 24
|
10月前
|
XML Java 开发者
Spring底层架构核心概念解析
理解 Spring 框架的核心概念对于开发和维护 Spring 应用程序至关重要。IOC 和 AOP 是其两个关键特性,通过依赖注入和面向切面编程实现了高效的模块化和松耦合设计。Spring 容器管理着 Beans 的生命周期和配置,而核心模块为各种应用场景提供了丰富的功能支持。通过全面掌握这些核心概念,开发者可以更加高效地利用 Spring 框架开发企业级应用。
325 18
下一篇
oss云网关配置