@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都是自定义异常类
分享到:
相关推荐
3.处理日志时,需要在每一个try-catch块包含一些处理代码,有时候异常处理的代码比正常执行代码还多,污染正常执行代码。 4.同样类型异常有不同的处理方式,使最终的处理变得复杂。 5.接口抛出异常,破坏封装,打破...
利用特性,绑定上下文,代理,反射等技术动态截获异常,实现切面编程
在net core2.2时,我当时就尝试过用autofac实现aop,但这次我不想用autofac,我用了一个更轻量级的框架,AspectCore。 用起来非常非常的简单,但一开始还是走了一点弯路,主要是网上都是net core3以下的教程,3以下...
主要介绍了Spring Boot中使用AOP统一处理web层异常的相关资料,需要的朋友可以参考下
使用SpringBoot通过自定义注解+AOP+全局异常处理实现参数统一非空校验
Spring Boot 使用 AOP 和 Redis 实现接口限流是一种高效且实用的方法,用于控制对特定接口的访问频率。以下是实现这个功能的基本步骤: 引入依赖:首先,在 Spring Boot 项目中引入 Redis 和 AOP 的相关依赖。这...
要实现全局异常统一处理,Java提供了多种机制,包括Java的异常处理机制、AOP(面向切面编程)等。其中,使用Java异常处理机制实现全局异常统一处理是最常见的方式。 在Java异常处理机制中,当一个方法抛出异常时,...
可扩展性强:使用 Spring AOP 进行方法耗时监测,可以方便的对其他的切面进行扩展,例如:日志、异常处理、权限控制等切面。 4. 提高系统性能:通过对系统中的方法进行耗时监测,可以及时发现系统中的性能瓶颈,...
采用SpringAOP拦截Controller,Service实现操作日志管理,统一处理异常,登陆日志管理,是SpringAOP的应用实践。通过SpringAOP的处理,可以方便移植日志管理功能,是个不错的学习demo
用springboot 集成mybatis多数据源,用aop实现的动态切换,支持事务,不会使aop动态切换失效。注意:此代码不涉及分布式事务,如果需要分布式事务 需要采取其他方案。
日历管理系统是用C#开发的,通过.NET平台下AOP的Postsharp增加了日志管理和异常处理的功能,附带的文档是关于AOP的技术文档。
该框架基于AOP思想,支持经典的AOP使用场景,可应用于日志记录,性能统计,安全控制,事务处理,异常处理等方面。 针对Android平台,Dexposed支持函数级别的在线热更新,例如对已经发布在应用市场上的宿主APK,当...
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向...对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被
2、统一异常处理。 3、分页功能:aop实现默认分页赋值。 4、统一结果返回。 5、策略工厂模式:用于不同业务逻辑的实现。 6、uid生成工具。 7、集成swagger在线接口文档。 8、文件上传功能。 9、excel文件解析功能:...
如上所述,TinyLibraryCQRS利用了Apworks框架实现AOP拦截,那么首先来了解一下Apworks支持AOP拦截的方式。Apworks采用Castle DynamicProxy实现AOP拦截,因此针对AOP拦截部分的开发,我们需要借助CastleDynamicProxy...
AopLogAopLog是基于SpringAop和ThreadLocal实现的一个对请求方法埋点记录与处理的日志工具包。设计目的和场景:使用Spring Aop拦截程序,基本上都是同一个小异,不想日后每个项目都柏林都写一份这样的Aop拦截处理...
说起AOP,其实博主接触这个概念也才几个月,了解后才知道,原来之前自己写的好多代码原理就是基于AOP的,比如MVC的过滤器Filter,它里面的异常捕捉可以通过FilterAttribute,IExceptionFilter去处理,这两个对象的...
AOP 采取横向抽取机制,取代了传统纵向继承体系的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。 目前最流行的 AOP 框架有两个,分别为 Spring AOP 和 AspectJ。Spring AOP 使用纯 ...
AOP (面向切面编程),缩写为Aspect Oriented Programming,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是JAVA 中Spring...
AOP要实现的是在我们原来写的代码的基础上,进行一定的包装,如在方法执行前、方法返回后、方法抛出异常后等地方进行一定的拦截处理或者叫增强处理。AOP的实现并不是因为Java提供了什么神奇的钩子,可以把方法的几个...