Spring3 AOP接口拦截详解:5种增强类型实战教程

网安智编 厦门萤点网络科技 2025-12-11 00:08 48 0
3.4 基于 AOP的实战3.4.1 增强类型 AOP联盟为增强定义了org..aop.接口,支持5种类型的增强。本章3.3节中使用到的@、@After等注解是基于实现的增强类型。其实也支持很多增强类型, AOP按照增强在目标类方法中的连接...

3.4 基于 AOP的实战3.4.1 增强类型

AOP联盟为增强定义了org..aop.接口,支持5种类型的增强。本章3.3节中使用到的@、@After等注解是基于实现的增强类型。其实也支持很多增强类型, AOP按照增强在目标类方法中的连接点位置可以分为5种。

• 前置增强:表示在目标方法执行前实施增强。

• 后置增强:表示在目标方法执行后实施增强。

• 环绕增强:表示在目标方法执行前后实施增强。

• 异常抛出增强:表示在目标方法抛出异常后实施增强。

• 引介增强:表示在目标类中添加一些新的方法和属性。

以下将依次介绍每种增量类型,由于基于XML和基于注解的配置其本质都是相同的,因此下面将只通过注解的方式演示各种增强类型,并观察各种增强类型的执行时序。

3.4.2 前置增强

的前置增强主要接口是,其顶级接口是AOP联盟中的接口。从如图3-6所示的类图可以发现,的前置增强扩展了接口。

前置增强后置增强环绕增强_Spring AOP增强类型_spring3 aop 接口拦截

图3-6 相关类图

下面将通过实现接口来新增一个前置增强实现类,然后通过案例阐述使用的前置增强类型的编程方式。前置增强实现类的代码如下:

spring3 aop 接口拦截_前置增强后置增强环绕增强_Spring AOP增强类型

下面将创建一个被增强类,用于被类增强,类的代码如下:

spring3 aop 接口拦截_Spring AOP增强类型_前置增强后置增强环绕增强

测试代码中需要创建被代理对象和前置增强的对象,并通过生成代理对象,测试代码如下:

spring3 aop 接口拦截_Spring AOP增强类型_前置增强后置增强环绕增强

生成的代理对象proxy就是被增强后的对象,运行测试代码,得到的运行结果如图3-7所示。

Spring AOP增强类型_前置增强后置增强环绕增强_spring3 aop 接口拦截

图3-7 前置增强测试效果图

由测试结果可以看出,在类的serve方法执行之前,前置增强的逻辑执行了。前置增强即在目标方法执行前实施增强逻辑。

3.4.3 后置增强

的后置增强主要接口是,其类图如图3-6所示。

下面将通过实现接口来新增一个后置增强实现类,然后通过3.4.2节中的案例阐述使用的后置增强类型的编程方式。后置增强实现类的代码如下:

spring3 aop 接口拦截_前置增强后置增强环绕增强_Spring AOP增强类型

测试代码中只需修改一行代码:

spring3 aop 接口拦截_Spring AOP增强类型_前置增强后置增强环绕增强

测试结果如图3-8所示。

Spring AOP增强类型_前置增强后置增强环绕增强_spring3 aop 接口拦截

图3-8 后置增强测试效果图

3.4.4 环绕增强

的环绕增强主要接口是,其类图如图3-6所示。

下面将通过实现接口来新增一个环绕增强实现类,然后通过3.4.2节中的案例阐述使用环绕增强类型的编程方式。环绕增强实现类的代码如下:

spring3 aop 接口拦截_Spring AOP增强类型_前置增强后置增强环绕增强

测试代码只需要修改使用环绕增强实现类tor,测试结果如图3-9所示。

Spring AOP增强类型_spring3 aop 接口拦截_前置增强后置增强环绕增强

图3-9 环绕增强测试效果图

3.4.5 异常抛出增强

前置增强后置增强环绕增强_spring3 aop 接口拦截_Spring AOP增强类型

的异常抛出增强主要接口是,其类图如图3-6所示。

下面将通过实现接口来新增一个异常抛出增强实现类,然后通过3.4.2节中的案例阐述使用的异常抛出增强类型的编程方式。异常抛出增强实现类的代码如下:

前置增强后置增强环绕增强_Spring AOP增强类型_spring3 aop 接口拦截

异常抛出增强的测试代码执行效果如图3-10所示。

spring3 aop 接口拦截_Spring AOP增强类型_前置增强后置增强环绕增强

图3-10 异常抛出增强测试效果图

3.4.6 引介增强

引介增强的目标是在目标类中添加一些新的方法和属性。以类为例,现在想给其添加一个接口中的()方法而不修改类的代码。代码如下所示:

spring3 aop 接口拦截_前置增强后置增强环绕增强_Spring AOP增强类型

的引介增强主要接口是tor,通过图3-11可以看出,已经提供了tor接口的实现类。

前置增强后置增强环绕增强_spring3 aop 接口拦截_Spring AOP增强类型

图3-11 tor相关类图

下面将通过扩展来实现引介增强。通过类继承并实现接口,代码如下:

此时需要修改配置文件,需要指定引介增强所在的实现接口并需要将属性设置为true。具体配置文件如下:

Spring AOP增强类型_前置增强后置增强环绕增强_spring3 aop 接口拦截

测试代码中,从上下文中获取代理对象,将其强制转化为一个对象。修改后测试代码如下:

spring3 aop 接口拦截_Spring AOP增强类型_前置增强后置增强环绕增强

运行测试结果如图3-12所示,发现类的代理对象多了一个新的功能,可以调用接口的方法。

Spring AOP增强类型_前置增强后置增强环绕增强_spring3 aop 接口拦截

图3-12 引介增强测试效果图

3.4.7 切入点类型

如3.2.2节所述,切入点是匹配连接点的拦截规则。之前的案例中使用的是注解@,该注解是中的。除了这个注解之外,也提供了其他一些切入点类型:

• 静态方法切入点

• 动态方法切入点

• 注解切入点

• 表达式切入点

• 流程切入点

• 复合切入点

• 标准切入点

各种切入点的类图如图3-13所示。

前置增强后置增强环绕增强_Spring AOP增强类型_spring3 aop 接口拦截

图3-13 切入点各类的类图