Spring AOP增强类型

本文详细介绍了Spring AOP的四种增强类型:前置增强、后置增强、环绕增强和异常抛出增强。通过实例展示了如何配置和使用这些增强,包括相关的接口实现、配置文件设置以及测试用例。此外,还提到了在不同场景下选择代理方式的考虑因素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

增强类型

Spring支持5种类型的增强,按照增强在目标类方法的连接点位置,可以分为以下5类。

前置增强:

后置增强:

环绕增强:

异常抛出增强:

前置增强

场景:实习服务生,对客户的问候:



以上就是我们的业务类;


下面编写我们的切面,实现类



测试类实现,采用TestNG:



 

采用XMLApplicationContext 进行配置,动态代理;


测试类实现:


ProxyFactoryBean负责为其他Bean创建代理实例,它内部使用ProxyFactory来完成这一工作。下面进一步了解ProxyFactoryBean几个常用的可配置属性。

1)       targer:代理目标对象;

2)       proxyInterfaces:代理所要实现的接口,可以多个接口。该属性还有一个别名属性interfaces。

3)       interceptorNames:需要植入目标对象的bean列表,采用Bean的名称指定。这些Bean必须是实现org.aopalliance.intercept.MethodInterceptor或org.springframework.aop.Advisor的Bean,配置中得顺序对应调用顺序。

4)       singleton:返回的代理是否是单例,默认为单例。

5)       optimize:当设置为true 时,强制使用cglib 代理。对于singleton 的代理,推荐使用cglib,对于其他作用域类型的代理,最好使用JDK代理(基于接口)。原因是cglib创建代理时速度慢,但创建出的代理对象运行效率高,而使用JDK代理的表现正好相反。

6)       proxyTargetClass:是否对类进行代理(而不是对接口进行代理),设置为true时,使用cglib代理。

 

后置增强

同上,后置增强只要实现AfterReturningAdvice 接口就可以了;


修改一些配置beans.xml:

 

运行结果:

 

环绕增强

环绕增强其实是前、后置增强的一个综合体;它允许在目标类方法调用前、后织入横切逻辑;他的实现更前、后置增强的实现也大同小异,他要实现一个Methodinterceptor 接口。

 

环绕增强如下:

 

 

 

添加环绕增强配置beans.xml:

 

只是实现接口不一样,其他基本雷同;

 

异常抛出增强

适合场景:事务管理,当参与事务的某个Dao发生异常时,事务管理器就必须回滚事务。

下面,我们就采用事务管理作为例子:

下面写一个基本业务:

 

异常增强类如下:

 

 

必须采用以下签名形式定义异常抛出的增强方法。

Void  afterThrowing([Method method , Object[ ] args, Object  targer] , Throwable  );

前面三个参数是可选的,后面的异常处理是必须的。它的入参可以是Throwable 或其子类。如下方法都是合法的:

afterThrowing(SQLException e);//数据库处理异常。

afterThrowing(RuntimeExceptione);//运行异常。

afterTrowing(Methodmethod, Object[] args,  Object  target , RuntimeException e);

使用那一个异常处理方法,spring反射的机制自动判断。

 

测试类如下:


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值