`
zhaoyanfangeye
  • 浏览: 124839 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用AOP实现异常处理

阅读更多
@Aspect
public class ServiceExceptionAOPHandler implements Ordered {
    private final Logger logger = LoggerFactory.getLogger(getClass());
    @Around("execution(* com.gosophia.*.service.impl.*.*(..))")
    public Object serviceExceptionIterceptor(ProceedingJoinPoint joinPoint)
            throws Throwable {
        try {
            logger.info("The method " + joinPoint.getSignature().getName()
                    + "() begins with " + Arrays.toString(joinPoint.getArgs()));
            Object result = joinPoint.proceed();
            logger.info("The method " + joinPoint.getSignature().getName()
                    + "() ends with " + result);
            return result;
        } catch (IllegalArgumentException iae) {// 捕获参数异常
            StringBuilder sb = new StringBuilder();
            sb.append(joinPoint.getTarget().getClass().getName() + " : "
                    + Arrays.toString(joinPoint.getArgs()) + " in "
                    + joinPoint.getSignature().getName() + "()");
            ExceptionDetail detail = new ExceptionDetail();
            detail.setErrorCode(ErrorCodeList.PARAMENTER_ERROR_CODE);
            throw new ParameterException(sb.toString(), detail, iae);
        }
        catch (org.hibernate.StaleObjectStateException cfe) {// 捕获数据并发异常
            ExceptionDetail ed = new ExceptionDetail();
            ed.setErrorCode(ErrorCodeList.CONCURRENCY_ERROR_CODE);
            ed.setMessage("detail message show,concurrency exception ");
            throw new ConcurrencyException("concurrency exception", ed, cfe);
        } 
        catch (ConcurrencyFailureException cfe) {// 捕获数据并发异常
            ExceptionDetail ed = new ExceptionDetail();
            ed.setErrorCode(ErrorCodeList.CONCURRENCY_ERROR_CODE);
            ed.setMessage("detail message show,concurrency exception ");
            throw new ConcurrencyException("concurrency exception", ed, cfe);
        } catch (DataAccessException dae) {// 捕获其他数据访问异常,此处如需细化需参考spring
            ExceptionDetail ed = new ExceptionDetail();
            ed.setErrorCode(ErrorCodeList.CRITICAL_TECHNICAL_ERROR_CODE);
            throw new TechnicalException(
                    "critical data access exception", ed, dae);
        }

    }
//在applicationContext中使用
<bean id="serviceExceptionHandler"
        class="com.gosophia.commons.exception.ServiceExceptionAOPHandler"></bean>

其中
ExceptionDetail,ConcurrencyException和ParameterException都是自定义异常类
分享到:
评论

相关推荐

    使用Spring AOP对异常进行统一处理

    3.处理日志时,需要在每一个try-catch块包含一些处理代码,有时候异常处理的代码比正常执行代码还多,污染正常执行代码。 4.同样类型异常有不同的处理方式,使最终的处理变得复杂。 5.接口抛出异常,破坏封装,打破...

    C# .net Aop 动态截获异常

    在提供的"ExinScada.Aop"压缩包中,可能包含了具体的AOP实现示例,包括特性定义、代理类实现以及如何与依赖注入框架集成的代码。通过对这些文件的分析和学习,开发者可以进一步理解如何在实际项目中应用C#和AOP来...

    Java Web开发异常处理方式及AOP技术

    本主题将深入探讨Java Web开发中的异常处理方式以及Aspect-Oriented Programming(面向切面编程,简称AOP)技术,这两种技术在构建健壮和可维护的应用程序中起着核心作用。 首先,让我们了解Java Web开发中的异常...

    Spring Boot中使用AOP统一处理web层异常的方法

    在Spring Boot中,AOP可以用来处理跨越多个模块的关注点,如日志记录、安全检查、异常处理等。 使用AOP处理web层异常 在Spring Boot中,默认情况下,系统会将错误跳转到error/错误页面中。但是,这种方式不能满足...

    Asp.net Core 3.1基于AspectCore实现AOP实现事务、缓存拦截器功能

    在net core2.2时,我当时就尝试过用autofac实现aop,但这次我不想用autofac,我用了一个更轻量级的框架,AspectCore。 用起来非常非常的简单,但一开始还是走了一点弯路,主要是网上都是net core3以下的教程,3以下...

    使用SpringBoot通过自定义注解+AOP+全局异常处理实现参数统一非空校验源码

    使用SpringBoot通过自定义注解+AOP+全局异常处理实现参数统一非空校验

    使用Spring的注解方式实现AOP的细节

    在Spring框架中,面向切面编程(AOP)是一种强大的工具,它允许程序员定义横切关注点,如日志、事务管理、权限控制等,这些关注点可以被模块化并独立于业务逻辑进行处理。本篇文章将深入探讨如何通过Spring的注解...

    spring boot demo (包括异常处理 aop redis的整合)

    通过这个项目,你不仅可以学习到Spring Boot的基础知识,还能了解到如何在实际场景中使用异常处理、AOP和Redis。这是一个很好的实践平台,帮助你深入理解这些技术,并提升你的开发技能。如果你在运行项目时遇到问题...

    Java AOP 公共异常处理,一个没有try的项目。.zip

    在"Java AOP 公共异常处理,一个没有try的项目"中,我们可以探讨如何利用AOP实现优雅的异常管理,避免在每个方法中都嵌套冗余的try-catch语句。 AOP的核心概念包括切面(Aspect)、连接点(Join Point)、通知...

    基于AOP的Java异常处理框架和工具的分析与设计.pdf

    但是,当前的异常处理机制仍然存在一些问题,在程序设计语言实现异常处理模型方面,在实际项目中经常发生不良设计容易导致异常类的激增等问题。 在Java编程语言中,对象与对象之间通过消息通信,而异常可以看做是一...

    spring的aop实现

    下面我们将深入探讨Spring AOP的概念、实现方式以及实际应用。 首先,我们需要理解AOP的基本概念。AOP是一种编程范式,它将关注点分离,使系统中的核心业务逻辑与辅助性任务(如日志、安全检查等)解耦。在Spring中...

    Spring AOP实现机制

    **Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的情况下,通过“切面”来插入额外的业务逻辑,如日志、事务管理等。AOP的引入极大地提高了代码的...

    springAOP实现数据字典.zip

    总的来说,"springAOP实现数据字典.zip"中的示例教程可能涵盖了以上步骤,通过AOP实现了数据字典的高效管理和使用。通过这种方式,我们可以将数据字典的逻辑封装起来,使其与业务逻辑分离,从而降低了代码的复杂性,...

    spring基于AOP实现事务

    总结一下,Spring基于AOP实现的事务管理通过TransactionProxyFactoryBean,结合声明式事务配置,能够提供一种高效且易于维护的事务解决方案。它允许我们在不修改业务逻辑的情况下,统一管理和控制事务,提升了代码的...

    使用Spring配置文件实现AOP

    AOP的核心思想是将分散在各个模块中的交叉性代码(如日志、事务处理)抽取出来,形成独立的切面,以便于复用和维护。它提供了一种模块化的方式,使得我们可以专注于编写核心业务代码,而无需关心那些通用但又分散的...

    Spring  AOP实现方法大全

    【Spring AOP实现方法大全】 在Spring框架中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们在不修改业务代码的情况下,插入额外的功能,比如日志记录、事务管理等。在...

    Unity结合三导实现依赖注入跟AOP

    1. AOP概念:AOP允许我们将关注点(如日志、性能跟踪、异常处理等)从主业务逻辑中分离出来,创建切面(Aspect),并在特定的连接点(Join Point,如方法调用)应用这些切面。 2. Unity AOP:Unity提供了对AOP的...

    JAVA 中Spring aop 实现日志记载

    - **连接点(Join Point)**:程序执行过程中特定的点,如方法调用或异常处理。 - **切点(Pointcut)**:定义一组连接点,匹配特定的连接点,如所有服务层的方法。 - **织入(Weaving)**:将切面与其他对象连接...

    AOP的实现机制.

    2. 连接点(Join Point):程序执行中的特定点,如方法调用、异常处理、对象创建等。 3. 通知(Advice):在特定连接点上执行的代码,例如,一个环绕通知(Around advice)会在方法调用前后执行。 4. 切入点...

    android 实现AOP 使用Aspectj Kotlin版Demo.zip

    这个"android 实现AOP 使用Aspect Kotlin版Demo"就是一个实例,展示了如何在Kotlin中利用AspectJ进行AOP编程。 首先,我们要了解AOP的基本概念。面向切面编程的核心在于“切面”和“通知”。切面是关注点的模块化,...

Global site tag (gtag.js) - Google Analytics