Spring AOP 示例

17 Mar 2025 | 5 分钟阅读

这里给出了 Spring1.2 旧式 AOP(基于 DTD)实现的示例。

虽然它在 Spring 3 中受支持,但建议使用 Spring AOP 与 AspectJ,我们将在下一页学习。

Spring1.2 旧式 AOP 实现支持 4 种类型的 advice。

  1. Before Advice 在实际方法调用之前执行。
  2. After Advice 在实际方法调用之后执行。如果方法返回一个值,则在返回值之后执行。
  3. Around Advice 在实际方法调用之前和之后执行。
  4. Throws Advice 如果实际方法抛出异常则执行。

要了解 Spring AOP 的基本概念,请访问上一页。


理解 advice 接口的层次结构

让我们通过下面给出的图表来理解 advice 的层次结构

spring aop advice interfaces

所有都是 AOP 中的接口。

MethodBeforeAdvice 接口扩展了 BeforeAdvice 接口。

AfterReturningAdvice 接口扩展了 AfterAdvice 接口。

ThrowsAdvice 接口扩展了 AfterAdvice 接口。

MethodInterceptor 接口扩展了 Interceptor 接口。它用于 around advice。


1) MethodBeforeAdvice 示例

创建一个包含实际业务逻辑的类。

文件:A.java

现在,创建实现 MethodBeforeAdvice 接口的 advisor 类。

文件:BeforeAdvisor.java

在 xml 文件中,创建 3 个 bean,一个用于 A 类,第二个用于 Advisor 类,第三个用于 ProxyFactoryBean 类。

文件:applicationContext.xml

理解 ProxyFactoryBean 类

ProxyFactoryBean 类由 Spring Framework 提供。它包含两个属性 target 和 interceptorNames。A 类的实例将被视为目标对象,advisor 类的实例将被视为拦截器。您需要在 xml 文件中将 advisor 对象作为列表对象传递。

ProxyFactoryBean 类的写法类似这样

现在,让我们调用实际的方法。

文件:Test.java

输出

在 MethodBeforeAdvice 中打印附加信息

我们可以打印附加信息,如方法名称、方法参数、目标对象、目标对象类名、代理类等。

您只需要更改 BeforeAdvisor.java 和 Test.java 这两个类。

文件:BeforeAdvisor.java
文件:Test.java

输出


2) AfterReturningAdvice 示例

创建一个包含实际业务逻辑的类。

文件:A.java

与前面的示例相同。

现在,创建实现 AfterReturningAdvice 接口的 advisor 类。

文件:AfterAdvisor.java

创建 xml 文件,与前面的示例一样,您只需要在这里更改 advisor 类。

文件:applicationContext.xml
文件:Test.java

与前面的示例相同。

输出


3) MethodInterceptor (AroundAdvice) 示例

创建一个包含实际业务逻辑的类。

文件:A.java

与前面的示例相同。

现在,创建实现 MethodInterceptor 接口的 advisor 类。

文件:AroundAdvisor.java

创建 xml 文件,与前面的示例一样,您只需要在这里更改 advisor 类。

文件:applicationContext.xml
文件:Test.java

与前面的示例相同。

输出


4) ThrowsAdvice 示例

创建一个包含实际业务逻辑的类。

文件:Validator.java

现在,创建实现 ThrowsAdvice 接口的 advisor 类。

文件:ThrowsAdvisor.java

创建 xml 文件,与前面的示例一样,您只需要更改 Validator 类和 advisor 类。

文件:applicationContext.xml
文件:Test.java

输出