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

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

    4. **AfterThrowing增强处理**: `@AfterThrowing`注解在目标方法抛出未处理异常时执行。`throwing`属性用于指定一个参数名,可以获取到抛出的异常对象: ```java @AfterThrowing(pointcut = "execution(* ...

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

    在IT行业中,Spring框架是Java企业级应用...通过合理利用`AfterThrowing`,我们可以使代码更加整洁,同时增强系统的异常处理能力。在实际项目中,结合其他通知类型,可以构建出灵活且易于维护的面向切面的解决方案。

    Spring AOP之5种增强方法应用范例

    通过`@AfterThrowing`注解,我们可以捕获并处理特定类型的异常: ```java @AfterThrowing(pointcut = "execution(* com.example.service.*.*(..))", throwing = "ex") public void handleException(Exception ex...

    Spring ThrowsAdvice使用例子

    在Spring中,`ThrowsAdvice`是一个重要的概念,它用于处理异常,提供了一种灵活的方式来增强方法的异常处理逻辑。这篇博客文章将通过一个具体的例子深入探讨如何在Spring中使用`ThrowsAdvice`。 `ThrowsAdvice`是一...

    Spring Aop Advise方法(增强方法) 中获取目标方法的参数

    - Spring AOP支持使用`@Aspect`注解声明切面,`@Before`, `@After`, `@Around`, `@AfterReturning`, `@AfterThrowing`注解用于声明不同的通知类型,这些注解可以指定切入点表达式,并在匹配的方法执行时应用通知。...

    Spring AOP之增强

    3. 异常增强(After Throwing):在目标方法抛出异常后调用,可以通过`@AfterThrowing`注解定义。 4. 环绕增强(Around):最强大的一种增强,可以控制目标方法的整个执行流程,通过`@Around`注解定义。 5. 最终...

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

    在IT行业中,Spring框架是Java企业级应用开发的首选,其AOP(面向切面编程)模块更是提供了强大的功能,让我们能够实现灵活的代码逻辑控制...在日常开发中,熟练掌握这一特性,无疑会增强你作为一名IT专业人士的技能。

    利用springmvc切面捕获全局异常入库源码

    为了确保捕获所有未被捕获的异常,开发者可能使用了`@AfterThrowing`注解来标记这个后置通知,并且切入点表达式可能是`@WithinController`或者其他更广泛的表达式,如`execution(* com.yourpackage..*.*(..))`,以...

    Spring5种增强代码

    1. 注解驱动的切面:使用`@Aspect`注解定义一个类作为切面,然后在类内部使用`@Before`, `@After`, `@AfterReturning`, `@AfterThrowing` 和 `@Around` 注解定义通知。切点表达式可以在注解中直接写,或者通过`@...

    spring3.1相关配置文件

    5. **资源处理**:Spring 3.1增强了对静态资源的处理能力,比如支持Gzip压缩和Etag头,提高了Web应用的性能。 6. **Bean生命周期管理**:在3.1版本中,`@PostConstruct`和`@PreDestroy`注解可用于标记初始化和销毁...

    spring AOP代理机制.docx

    AOP通过代理机制实现了这一目标,代理可以在方法调用前后插入额外的代码,实现对原有功能的增强。 在Spring AOP中,有两种主要的代理方式:静态代理和动态代理。 1. **静态代理**:在静态代理中,我们需要手动创建...

    基于springboot的过滤器。拦截器,Aspect,定时器

    在Spring Boot应用中,过滤器(Filter)、拦截器(Interceptor)和切面(Aspect)都是实现请求处理逻辑增强的重要手段,而定时任务则用于执行周期性的后台任务。下面将详细介绍这些概念及其用法。 1. **Spring Boot...

    spring2.5需要的jar

    同时,`@Before`、`@After`、`@AfterReturning`、`@AfterThrowing`和`@Around`注解使得定义通知变得更加直观。 3. **类型安全的集合注入**: Spring 2.5引入了类型安全的集合注入,可以确保在注入集合时,元素类型...

    spring_day03

    通过@Transactional注解,我们可以声明方法需要在事务中执行,Spring会自动处理事务的开启、提交或回滚。例如: ```java @Repository public class UserRepository { @Autowired private JdbcTemplate ...

    Spring-Aop所有jar

    5. 异常处理:通过@AfterThrowing通知,可以轻松捕获和处理方法抛出的异常。 6. 切点表达式的增强:Spring 4.0引入了更多的切入点表达式关键字,使定位方法更加灵活。 在实际开发中,Spring AOP的应用场景广泛,...

    基于深度学习的情感分类研究.pdf

    例如,使用Spring框架时,可以通过注解如@Before、@After、@AfterReturning、@AfterThrowing和@Around来定义切面逻辑,这些注解分别表示在目标方法之前、之后执行,以及在方法正常返回后、异常返回后、方法执行前后...

    Spring AOP 基于注解详解及实例代码

    在增强处理方法中,我们可以通过`JoinPoint`或`ProceedingJoinPoint`来获取目标方法的相关信息,例如参数、签名、目标对象和代理对象。例如,获取目标方法参数: ```java Object[] args = jp.getArgs(); ``` 或者...

    springaop学习

    3. **Advice(通知/增强处理)**:在切面的某个特定连接点上执行的动作。根据其执行时机不同,Spring 支持以下几种类型的通知: - `Before`:在方法执行前执行。 - `After`:无论方法是否成功执行,都会在其后执行...

    Spring选择题单选多选综合-答案版.docx

    6. **Spring 增强(Advice)**:Spring 提供了多种类型的 Advice,如 BeforeAdvice(前置增强),AfterReturnAdvice(后置增强),AfterThrowing(异常后增强)和 AroundAdvice(环绕增强),用于在方法调用的不同...

Global site tag (gtag.js) - Google Analytics