首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
AOP引入:OOP存在哪些局限性?
AOP常见使用场景
AOP概念:Aspect、Join Point和Advice等术语应该如何理解?
Java AOP设计模式:代理、判断和拦截器模式
Java AOP代理模式(Proxy):Java静态代理和动态代理的区别是什么?
Java AOP判断模式(Predicate):如何筛选Join Point?
Java AOP拦截器模式(Interceptor):拦截执行分别代表什么?
Spring AOP 功能概述:核心特性、编程模型和使用限制
Spring AOP编程模型:注解驱动、XML配置驱动和底层API
Spring AOP设计目标:Spring AOP与 AOP框架之间的关系是竞争还是互补?
Spring AOP Advice类型:Spring AOP丰富了哪些AOP Advice呢?
Spring AOP代理实现:为什么Spring Framework选择三种不同AOP实现?
JDK动态代理:为什么Proxy.newProxyInstance会生成新的字节码?
CGLIB动态代理:为什么Java动态代理无法满足AOP的需要?
AspectJ代理代理:为什么Spring推荐AspectJ注解?
AspectJ基础:Aspect、Join Points、Pointcuts和Advice语法和特性
AspectJ注解驱动:注解能完全替代AspectJ语言吗?
Spring核心基础:《小马哥讲Spring核心编程思想》还记得多少?
@AspectJ注解驱动
编程方式创建 @AspectJ代理
XML配置驱动 - 创建AOP代理
标准代理工厂API - ProxyFactory
@AspectJ Pointcut指令与表达式:为什么Spring只能有限支持?
XML配置Pointcut
API实现Pointcut
@AspectJ拦截动作:@Around与@Pointcut有区别吗?
XML配置Around Advice
API实现Around Advice
@AspectJ前置动作:@Before与@Around谁优先级执行?
XML配置Before Advice
API实现Before Advice
@AspectJ后置动作 - 三种After Advice之间的关系?
XML配置三种After Advice
API实现三种After Advice
自动动态代理
替换TargetSource
Spring AOP API整体设计
接入点接口 - Joinpoint
Joinpoint条件接口 - Pointcut
Pointcut操作 - ComposablePointcut
Pointcut便利实现
Pointcut AspectJ实现 - AspectJExpressionPointcut
Joinpoint执行动作接口 - Advice
Joinpoint Before Advice标准实现
Joinpoint Before Advice AspectJ实现
Joinpoint After Advice标准实现
Joinpoint After Advice AspectJ实现
Advice容器接口 - Advisor
Pointcut与Advice连接器 - PointcutAdvisor
Introduction与Advice连接器 - IntroductionAdvisor
Advisor的Interceptor适配器 - AdvisorAdapter
AdvisorAdapter实现
AOP代理接口 - AopProxy
AopProxy工厂接口与实现
JDK AopProxy实现 - JdkDynamicAopProxy
当前位置:
首页>>
技术小册>>
Spring AOP 编程思想(上)
小册名称:Spring AOP 编程思想(上)
### 章节标题:XML配置Around Advice 在Spring AOP(面向切面编程)的广阔领域中,XML配置是一种传统且强大的方式,用于声明性地定义切面、通知(Advice)以及它们如何与目标方法结合。本章将深入探讨XML配置中的Around Advice,它是AOP中最强大的通知类型之一,因为它能够在目标方法执行前后执行自定义代码,并有机会决定是否继续执行目标方法或中断执行流程。 #### 1. 引言 Spring AOP通过分离关注点提高了软件模块的可维护性和可重用性。在Spring中,Aspect(切面)是跨多个类和对象的方法调用的横切关注点(cross-cutting concern)的模块化。Advice(通知)是切面的具体实现,它定义了切面的“何时”和“做什么”。Around Advice作为通知的一种,提供了在目标方法执行前后插入自定义行为的能力,并可以通过返回值和异常控制目标方法的执行流程。 #### 2. XML配置基础 在深入探讨Around Advice之前,了解Spring AOP的XML配置基础是必要的。Spring AOP的XML配置主要通过`<aop:config>`元素及其子元素来定义切面、切入点(Pointcut)和通知。`<aop:config>`是Spring AOP配置的容器,它包含了所有与AOP相关的定义。 ##### 2.1 引入AOP命名空间 要在Spring XML配置文件中使用AOP相关元素,首先需要引入AOP的XML Schema定义。这通常通过添加以下命名空间声明到XML文件的顶部来完成: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- AOP配置将在这里定义 --> </beans> ``` ##### 2.2 定义Aspect 在Spring中,切面(Aspect)可以是一个普通的Java类,它包含了通知和切入点的定义。在XML配置中,使用`<aop:aspect>`元素来声明一个切面,并通过`ref`属性指定该切面对应的bean。 ```xml <aop:config> <aop:aspect id="myAspect" ref="myAspectBean"> <!-- 通知和切入点定义将放在这里 --> </aop:aspect> </aop:config> <bean id="myAspectBean" class="com.example.MyAspect"/> ``` #### 3. Around Advice详解 Around Advice是AOP中最复杂的通知类型,因为它允许在目标方法执行前后执行代码,并且可以控制目标方法的执行(如是否执行、修改返回值、处理异常等)。在XML配置中,Around Advice通过`<aop:around>`元素来定义。 ##### 3.1 定义Around Advice `<aop:around>`元素需要指定`method`属性,该属性引用了切面类中用于实现Around Advice的方法。该方法必须接受一个`ProceedingJoinPoint`类型的参数,这个参数代表了当前连接点(即被通知的方法),并提供了控制目标方法执行的能力。 ```xml <aop:around method="myAroundAdvice" pointcut-ref="myPointcut" /> ``` 这里,`myAroundAdvice`是切面类中实现Around Advice的方法名,`pointcut-ref`引用了之前定义的切入点表达式或另一个切入点bean的ID。 ##### 3.2 实现Around Advice方法 在切面类中,实现Around Advice的方法通常如下所示: ```java public Object myAroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable { // 在目标方法执行前执行的代码 System.out.println("Before method execution"); try { // 调用目标方法 Object result = joinPoint.proceed(); // 在目标方法执行后执行的代码 System.out.println("After method execution"); // 可以修改并返回目标方法的返回值 return result; } catch (Exception e) { // 处理异常 System.out.println("Exception occurred: " + e.getMessage()); throw e; // 可以选择重新抛出异常或处理异常后返回其他值 } } ``` #### 4. 切入点(Pointcut)定义 Around Advice需要与一个或多个切入点关联,以便指定哪些方法将被通知。切入点表达式定义了哪些连接点(JoinPoint)将被拦截。在Spring AOP中,切入点表达式可以通过`<aop:pointcut>`元素在`<aop:config>`内定义,并通过`id`属性为其指定一个唯一标识符,然后在`<aop:around>`等通知元素中通过`pointcut-ref`属性引用。 ```xml <aop:pointcut id="myPointcut" expression="execution(* com.example.service.*.*(..))"/> ``` 这个切入点表达式匹配`com.example.service`包下所有类的所有方法的执行。 #### 5. 整合示例 将上述所有元素整合到一个完整的Spring XML配置文件中,我们可以得到如下的配置: ```xml <beans ...> <aop:config> <aop:pointcut id="myPointcut" expression="execution(* com.example.service.*.*(..))"/> <aop:aspect id="myAspect" ref="myAspectBean"> <aop:around method="myAroundAdvice" pointcut-ref="myPointcut"/> </aop:aspect> </aop:config> <bean id="myAspectBean" class="com.example.MyAspect"/> <!-- 其他bean定义 --> </beans> ``` 在这个配置中,`MyAspect`类中的`myAroundAdvice`方法将被用作Around Advice,它将在`com.example.service`包下所有类的所有方法执行前后被调用。 #### 6. 结论 通过XML配置Around Advice,Spring AOP提供了一种强大而灵活的方式来增强现有代码的功能,而无需修改那些代码本身。Around Advice的灵活性在于它能够在目标方法执行前后执行自定义逻辑,并有能力控制目标方法的执行流程,包括是否执行目标方法、修改返回值以及处理异常等。掌握XML配置Around Advice是深入理解Spring AOP的重要一步,也是提高应用程序模块化和可维护性的关键。
上一篇:
@AspectJ拦截动作:@Around与@Pointcut有区别吗?
下一篇:
API实现Around Advice
该分类下的相关小册推荐:
Java必知必会-Maven高级
Java语言基础3-流程控制
Java语言基础1-基础知识
Java必知必会-Maven初级
Java必知必会-JDBC
Java语言基础5-面向对象初级
JAVA 函数式编程入门与实践
Mybatis合辑2-Mybatis映射文件
Java语言基础9-常用API和常见算法
Java语言基础16-JDK8 新特性
Java语言基础12-网络编程
Java性能调优实战