`
zzg
  • 浏览: 124468 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

spring aop 处理exception()

阅读更多

在目前使用的现有框架当中,利用springAOP机制来控制事务处理是目前最流行的一种控制事务的方式。<o:p></o:p>

但是我们在某种使用场合的过程中,为什么有时事务处理老是不起作用呢?这里,为您道出原因之一,<o:p></o:p>

<o:p></o:p>

首先请看一段话<o:p></o:p>

Spring的事务实现采用基于AOP的拦截器来实现,如果没有在事务配置的时候注明回滚的checked exception,那么只有在发生了unchecked exception的时候,才会进行事务回滚。<o:p></o:p>

<o:p></o:p>

有必要先解释一下checked exceptionunchecked exception<o:p></o:p>

先看看EXCEPTIONJDK文档当中的结构<o:p></o:p>

java.lang.Object<o:p></o:p>
  继承者 java.lang.Throwable<o:p></o:p>
      继承者 java.lang.Exception<o:p></o:p>
          继承者 java.lang.RuntimeException<o:p></o:p>
<o:p> </o:p>
Unchecked exception: 这类异常都是RuntimeException的子类,虽然RuntimeException同样也是Exception的子类,但是它们是特殊的。Exception是作为checked Exception 出现的。<o:p></o:p>
所以,除了ErrorRuntimeException,其他剩下的异常都是你需要关心的,而这些异常类统称为Checked Exception<o:p></o:p>
<o:p> </o:p>

有了以上的基础,看看我们框架当中的事务属性<o:p></o:p>

<property name="transactionAttributes"><o:p></o:p>

                     <props><o:p></o:p>

                            <prop key="get*">PROPAGATION_REQUIRED,readOnly </prop><o:p></o:p>

                            <prop key="save*">PROPAGATION_REQUIRED </prop><o:p></o:p>

                            <prop key="delete*">PROPAGATION_REQUIRED</prop><o:p></o:p>

                            <prop key="update*">PROPAGATION_REQUIRED </prop>

                     </props> <o:p></o:p>

<o:p> </o:p>

</property><o:p></o:p>

<o:p> </o:p>

此处,我们没有指定任何异常,那么它目前默认处理的就是unchecked exception了,再结合我们自身每个项目的模块,在我们的每个项目当中几乎都定义了自己的异常,这些异常都是继承自Exception,很不幸的是,我们继承的Exception包括自己定义的异常,都是checked exception<o:p></o:p>

<o:p> </o:p>

所以,在我们的事务处理机制当中,事务不管用了。<o:p></o:p>

解决办法有2个:<o:p></o:p>

1,在事务属性后面加上需要回滚的checked exception。比如<prop key="save*">PROPAGATION_REQUIRED,-XXXXException</prop>(注意那个"-",对应的是"+")<o:p></o:p>

2, 不改配置文件,将需要事务回滚的异常继承自unchecked exception类,也就是RuntimeException
分享到:
评论

相关推荐

    spring aop切面拦截指定类和方法实现流程日志跟踪

    ### Spring AOP 实现流程日志跟踪 #### 一、背景与目的 在现代软件开发过程中,为了确保系统的稳定性和可维护性,通常会引入非功能性的需求来增强应用程序的功能,比如日志记录、安全控制等。这些需求往往不是业务...

    Spring Aop的简单实现

    Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它为应用程序提供了声明式的企业级服务,如日志、事务管理等。在本项目中,我们将探讨如何通过配置文件实现Spring AOP...

    aop+exception的测试代码

    在本案例中,"aop+exception"的测试代码可能涉及到如何在Spring框架中使用AOP来处理异常。 首先,让我们深入了解一下AOP。Spring AOP是Spring框架的一个重要组成部分,它允许开发者定义“切面”,即跨越多个对象的...

    spring AOP注解的应用1

    在Spring框架中,AOP(面向切面编程)是一种强大的工具,它允许程序员将关注点分离,例如日志记录、事务管理、权限检查等,从核心业务逻辑中解耦出来。本篇主要探讨的是如何利用Spring AOP的注解来实现这些功能,...

    spring aop API示例

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种强大的方式来实现代码的横切关注点,如日志记录、事务管理、性能监控等。在这个"spring aop API示例"中,我们将深入探讨如何利用Spring AOP的四...

    spring-aop.rar_aop1270_spring_spring aop

    Spring AOP,即Spring的面向切面编程,是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强或统一处理的方法。本文将围绕Spring AOP的源码分析,探讨其核心概念、工作原理以及在...

    用注解的方式进行SpringAOP开发

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理)从核心业务逻辑中解耦出来。本篇我们将深入探讨如何使用注解的方式来实现Spring AOP开发。 ...

    基于注解配置和使用spring AOP(spring mvc框架)

    在Spring MVC中,AOP常用于处理全局异常、事务管理和安全控制。例如,你可以创建一个异常处理切面,捕获所有控制器方法抛出的异常并统一处理: ```java @Aspect public class ExceptionHandlingAspect { @...

    Spring框架+SpringAOP动态代理

    ### Spring框架+SpringAOP动态代理 #### 一、Spring AOP 动态代理概述 在探讨Spring AOP(Aspect-Oriented Programming,面向切面编程)中的动态代理之前,我们首先简要回顾一下AOP的基本概念。面向切面编程是一种...

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

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点分离,将横切关注点(如日志、事务管理、权限检查等)与核心业务逻辑解耦。本篇文章将深入探讨Spring AOP中的5种增强方法,以及如何...

    SpringAop.rar_aop

    Spring AOP,全称为Aspect-Oriented Programming(面向切面编程),是Spring框架的重要组成部分,主要用来处理系统中的横切关注点,如日志、事务管理、权限控制等。通过AOP,我们可以将这些分散在代码各处的重复逻辑...

    spring注解aop demo

    Spring注解AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的一个重要特性,它使得开发者可以在不修改原有代码的情况下,通过添加注解来实现横切关注点,如日志、事务管理等。下面我们将深入探讨...

    spring aop日志.doc

    &lt;bean id="testBeforeAdvice" class="com.company.springaop.test.TestBeforeAdvice" /&gt; &lt;bean id="beanImpl" class="com.company.springaop.test.BeanImpl" /&gt; ``` 在这个配置中,`aop:before`元素定义了一个切点...

    spring基于AOP实现事务

    在Spring框架中,事务管理是核心功能之一,它允许开发者以声明式或编程式的方式处理应用中的事务。本文将深入探讨如何基于AOP(面向切面编程)来实现Spring的事务管理,特别是通过TransactionProxyFactoryBean。让...

    springAOP demo 带错误解决文档

    Could not instantiate bean class [org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: ...

    spring aop

    Spring AOP,全称为Aspect Oriented Programming(面向切面编程),是Spring框架的重要组成部分,它为应用程序提供了一种模块化和声明式的方式来处理交叉关注点,如日志、事务管理、性能监控等。AOP的核心概念是切面...

    Spring aop.rar

    总之,Spring AOP提供了一种优雅的方式来处理应用程序中的横切关注点,如日志记录。通过定义切面和切入点,我们可以无侵入地记录方法执行的相关信息,这对问题排查和系统监控至关重要。对于初学者来说,理解并掌握...

    Spring AOP - Advice

    **Spring AOP - Advice** Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了在不修改源代码的情况下,对程序进行功能增强的一种机制。Advice是AOP中的核心概念,代表了在特定连接点(Join Point)...

    spring boot aop 统一处理日志

    在Spring Boot应用中,AOP(面向切面编程)是一种强大的工具,用于实现代码的解耦和模块化,尤其适用于处理横切关注点,如日志记录、事务管理、安全控制等。本教程将深入探讨如何利用Spring Boot的AOP特性来实现日志...

Global site tag (gtag.js) - Google Analytics