首页 > 教程 > 理解Spring AOP的XML配置

理解Spring AOP的XML配置

时间:2024-05-13 | 来源: | 阅读:124

话题: 角度 Ri S in 配置

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

本文分享自华为云社区《Spring高手之路18——从XML配置角度理解Spring AOP》,作者: 砖业洋__。

Spring AOP使用动态代理作为其主要机制来实现面向切面的编程。这种机制允许Spring在运行时动态地创建代理对象,这些代理对象包装了目标对象(即业务组件),以便在调用目标对象的方法前后插入额外的行为(如安全检查、事务管理、日志记录等)。

1. Spring AOP与动态代理

1.1 Spring AOP和动态代理的关系

Spring AOP 使用动态代理作为其主要机制来实现面向切面的编程。这种机制允许 Spring 在运行时动态地创建代理对象,这些代理对象包装了目标对象(即业务组件),以便在调用目标对象的方法前后插入额外的行为(如安全检查、事务管理、日志记录等)。

  • JDK动态代理:当目标对象实现了一个或多个接口时, Spring AOP 默认使用 JDK 的动态代理。 JDK 动态代理通过反射机制,为接口创建一个代理对象,这个代理对象会拦截对目标接口方法的所有调用。

  • CGLIB代理:如果目标对象没有实现任何接口, Spring AOP 会退回到使用 CGLIB 库生成目标类的子类。 CGLIB Code Generation Library )是一个强大的高性能代码生成库,它在运行时扩展了 Java 类,并在子类中覆盖了方法来实现方法拦截。

无论使用哪种代理方式,目的都是在不改变原有业务逻辑代码的基础上,通过切面定义的通知在方法执行的不同阶段插入附加行为。

1.2 AOP基本术语

切面(Aspect):切面是面向切面编程的核心,它是将横跨多个类的关注点(如日志记录、事务管理等)模块化的构造。一个切面可以包含多种类型的通知( Advice )和一个或多个切点( Pointcut ),用于定义在何处以及何时执行这些通知。

连接点(Join Point):连接点代表程序执行过程中的某个特定位置, Spring AOP 限定这些位置为方法的调用。简而言之,连接点就是能够插入切面通知的点。

通知(Advice):通知定义了切面在连接点上要执行的动作。根据通知类型的不同,这些动作可以在方法调用之前、之后、返回结果后或抛出异常时执行。

  • 前置通知( Before advice ):在方法执行之前执行。
  • 后置通知( After advice ):在方法执行后执行,无论其结果如何。
  • 返回后通知( After-returning advice ):在方法成功执行之后执行。
  • 异常后通知( After-throwing advice ):在方法抛出异常后执行。
  • 环绕通知( Around advice ):在方法执行之前和之后执行,提供对方法调用的全面控制。

切点(Pointcut):切点是一个表达式,切点表达式允许通过方法名称、访问修饰符等条件来匹配连接点,决定了通知应该在哪些方法执行时触发。

目标对象(Target Object):被一个或多个切面所通知的对象。也被称为被代理对象。

AOP代理(AOP Proxy): AOP 框架创建的对象,用于实现切面契约(由通知和切点定义)。在 Spring AOP 中, AOP 代理可以是 JDK 动态代理或 CGLIB 代理。

引入(Introduction):引入允许向现有的类添加新的方法或属性。这是通过定义一个或多个附加接口( Introduction interfaces )实现的, AOP 框架会为目标对象创建一个代理,该代理实现这些接口。

如果还是觉得抽象,我们再举一个电影制作的例子来类比

切面(Aspect)


湘ICP备2022002427号-10湘公网安备:43070202000427号
© 2013~2019 haote.com 好特网