`
默翁1
  • 浏览: 25691 次
社区版块
存档分类
最新评论

AfterThrowing 增强处理

 
阅读更多

使用@AfterThrowing Annotation 可以标注一个AfterThrowing增强,处理程序中未处理的异常

在使用@AfterThrowing Annotation时,可以指定以下两个属性

(1)pointcut:指定切入点对应的切入表达式

(2)throwing:功能是一个返回值形参名,增强处理定义的方法可以通过该形参名来访问目标方法中抛出的异常对象

public interface IUserDao {
	public void save();
	public void update();
	public void delete();
}

 

@Repository
public class UserDaoIm implements IUserDao{

	public void save() {
		int i=5/0;
		System.out.println("保存用户信息");
	}

	public void update() {
		System.out.println("更新用户信息");
	}

	public void delete() {
		System.out.println("删除用户信息");
	}
	
}

 

@Aspect
public class Throw {
	@AfterThrowing(throwing="ex",pointcut="execution(* save(..))")
	public void dealException(Throwable ex){
		System.out.println("目标函数抛出异常"+ex.getMessage());
	}
}

 

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
	<context:component-scan base-package="annotation.**"></context:component-scan>
	<bean id="advice" class="annotation.Advice"></bean>
	<bean id="throw" class="annotation.Throw"></bean>
<!-- 	<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"></bean> -->

 

public class Test {
	public static void main(String[] args) {
		ApplicationContext context=new ClassPathXmlApplicationContext("annotation/beam.xml");
		//获取代理lei
		IUserDao userDao=(IUserDao)context.getBean("userDaoIm");
		userDao.save();
	}
}

 

开始事务提交
目标函数抛出异常/ by zero
Exception in thread "main" java.lang.ArithmeticException: / by zero
	at annotation.UserDaoIm.save(UserDaoIm.java:10)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
	at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:55)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
	at annotation.Advice.adviceMethod(Advice.java:13)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
	at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
	at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	at $Proxy9.save(Unknown Source)
	at annotation.Test.main(Test.java:13)

 

0
0
分享到:
评论

相关推荐

    spring AOP定义AfterThrowing增加处理实例分析

    主要介绍了spring AOP定义AfterThrowing增加处理,结合实例形式分析了spring面向切面AOP定义AfterThrowing相关实现步骤与操作技巧,需要的朋友可以参考下

    8Spring AOP盗梦空间之三 ——AfterThrowing

    NULL 博文链接:https://garrincha.iteye.com/blog/2111957

    Spring AOP详细介绍.docx

    (3)Advice(通知):AOP在特定的切入点上执行的增强处理,有before,after,afterReturning,afterThrowing,around (4)Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式 (5)AOP代理:AOP框架...

    AOP 和 Aspect 注解切入 测试 Demo

    基于 MethodBeforeAdvice、AfterReturningAdvice 利用 Spring Api 定义前、后置处理方法,并通过代理工厂类获取代理对象(代码或Xml配置实现) 2.ProxyFactoryBean 显式地设置 Advisors、Advice、Target等(基于代理...

    7Spring AOP盗梦空间之二——获得返回值AfterReturnning

    NULL 博文链接:https://garrincha.iteye.com/blog/2111779

    Java八股文-Spring AOP

    通知是直译过来的结果,我个人感觉叫做“业务增强”更合适 对照代码就是拦截器定义的 相关方法,通知分为如下几种: 1. 前置通知(before):在执行业务代码前做些操作,比如获取连接对象,登陆鉴权 2. 后置通知(after)...

    Spring AOP @Aspect 基本用法

    1、@Aspect放在类头上,把...3.4、@AfterThrowing,后置【catch】通知,放在方法头上,使用throwing来引用抛出的异常。 3.5、@Around,环绕通知,放在方法头上,这个方法要决定真实的方法是否执行,而且必须有返回值。

    【Spring AOP】@Aspect结合案例详解(一): @Pointcut使用@annotation + 五种通知

    本文带来的案例是:打印Log,主要介绍@Pointcut切点表达式的@annotation方式,以及 五种通知Advice注解:@Before、@After、@AfterRunning、@AfterThrowing、@Around。 本资源是@Pointcut使用@annotation的方式,结合...

    Spring注解 - 52注解 - 原稿笔记

    注解包含: 拦截器 , 过滤器 , 序列化 , @After , @AfterReturning , @AfterThrowing , @annotation , @Around , @Aspect , @Autowired , @Bean , @Before , @Component , @ComponentScan , @ComponentScans , @...

Global site tag (gtag.js) - Google Analytics