Spring——11异常通知&环绕通知

配置异常通知的步骤(AspectJ 方式)

  1. 只有当切点报异常才能触发异常通知
  2. 在 spring 中有 AspectJ 方式提供了异常通知的办法
    如果希望通过 schema-base 实现需要按照特定的要求自己编写方法

3. 实现步骤

  1. 新建类,在类写任意名称的方法
public class MyThrowAdvice{ 
		public void myexception(Exception e1){ 
		System.out.println("执行异常通知 "+e1.getMessage()); 
		} 
}
  1. 在 spring 配置文件中配置
    aop:aspect标签的 ref 属性——表示方法在哪个类中
    举例:ref=“mythrow”
    aop:xxxx/标签——表示什么通知
    举例:aop:after-throwing ,aop:pointcut ,aop:aspect
    method参数: 当触发这个通知时,调用哪个方法
    举例:method=“方法名”
    throwing参数: 异常对象名,必须和通知中方法参数名相同(可以不在通知中声明异常对象)
    举例:
<bean id="mythrow" class="com.youdian.advice.MyThrowAdvice"></bean> 
<aop:config> 
	<aop:aspect ref="mythrow"> 
	<aop:pointcut expression="execution(* com.youdian.test.Demo.demo1())" 
	id="mypoint"/> 
	<aop:after-throwing method="myexception" pointcut-ref="mypoint" 
	throwing="e1"/>
	</aop:aspect> 
</aop:config> 
<bean id="demo" class="com.youdian.test.Demo"></bean>

异常通知(Schema-based 方式)

  1. 新建一个类实现 throwsAdvice 接口
    必须自己写方法,且必须叫 afterThrowing
    有两种参数方式(必须是 1 个或 4 个)
  2. 异常类型要与切点报的异常类型一致
public class MyThrow implements ThrowsAdvice{ 
   public void afterThrowing(Method m, Object[] args, Object target, 
	Exception ex) {
    System.out.println("执行异常通知"); 
  } 
  	public void afterThrowing(Exception ex) throws Throwable { 
  	System.out.println("执行异常通过-schema-base 方式 "); 
  	} 
}
  1. 在 ApplicationContext.xml 配置
<bean id="mythrow" class="com.youdian.advice.MyThrow"></bean> 
<aop:config> 
	<aop:pointcut 
	expression="execution(*com.youdian.test.Demo.demo1())" id="mypoint"/> 
	<aop:advisor advice-ref="mythrow" pointcut-ref="mypoint" /> 
</aop:config> 
<bean id="demo" class="com.youdian.test.Demo"></bean>

环绕通知(Schema-based 方式)

  1. 把前置通知和后置通知都写到一个通知中,组成了环绕通知

2. 实现步骤

  1. 新建一个类实现 MethodInterceptor
public class MyArround implements MethodInterceptor { 
@Override 
	public Object invoke(MethodInvocation arg0) throws Throwable { 
			System.out.println("环绕-前置"); 
			Object result = arg0.proceed();//放行,调用切点方式
			System.out.println("环绕-后置"); 
			return result;
			}
}
  1. 配置 applicationContext.xml
<bean id="myarround" class="com.youdian.advice.MyArround"></bean> 
<aop:config> 
	<aop:pointcut expression="execution(* com.youdian.test.Demo.demo1())" 
	id="mypoint"/> 
	<aop:advisor advice-ref="myarround" pointcut-ref="mypoint" /> </aop:config> 
<bean id="demo" class="com.youdian.test.Demo"></bean>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值