承接 用AOP实现业务service的重新调用(一),我们继续......
service重试的落地实现
方案A: web业务系统里面有很多action,很多service,如果直接从每个调用service的点入手的话,修改点会很多,而且代码会大量冗余,实现代码并不复杂
try{ //service调用 } catch(UncategorizedSQLException e) { if(retry) { //service调用 } }
方案B: 因为我们使用了spring,所以自然会想到AOP,通过拦截器来拦截service方法的调用,一旦发生UncategorizedSQLException,就重试一次service方法的调用.直接上代码:
import java.lang.reflect.Method; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.springframework.aop.framework.ReflectiveMethodInvocation; import org.springframework.dao.DataIntegrityViolationException; public class ServiceRetryAdvice implements MethodInterceptor { private static ThreadLocal<Integer> retryNum = new ThreadLocal<Integer>() { public Integer initialValue() { return 0; } }; public Object invoke(MethodInvocation invocation) throws Throwable { Object returnObject = null; try{ returnObject = invocation.proceed(); } catch(DataIntegrityViolationException e) { if (retryNum.get() == 0){ retryNum.set(1); ReflectiveMethodInvocation refInvocation = (ReflectiveMethodInvocation)invocation; Object proxy = refInvocation.getProxy(); Method method = refInvocation.getMethod(); Object[] args = refInvocation.getArguments(); returnObject = method.invoke(proxy, args); } else { throw e; } } finally { retryNum.remove(); } return returnObject; } }
关于代码的详细说明以及各种需要考虑到的方方面面,请参照
用AOP实现业务service的重新调用(三)
相关推荐
AOP是一种编程范式,它将关注点分离,使系统中的核心业务逻辑与辅助性任务(如日志、安全检查等)解耦。在Spring中,这些关注点被封装为“切面”(Aspect),并在运行时通过“通知”(Advice)动态地插入到目标对象...
在Spring框架中,面向切面编程(AOP)是一种强大的工具,它允许程序员定义横切关注点,如日志、事务管理、权限控制等,这些关注点可以被模块化并独立于业务逻辑进行处理。本篇文章将深入探讨如何通过Spring的注解...
在SLT-Spring-AOP这个项目中,你可以找到具体的实现示例,包括如何定义切面、通知和切入点表达式,以及如何在业务代码中应用这些概念。通过对该项目的深入学习,你将能够更好地理解和掌握Spring AOP的实战应用。
AOP是一种设计模式,它允许我们定义横切关注点,并将其与业务逻辑分离,从而提高代码的可维护性和复用性。下面将详细探讨在XML配置中如何实现这两种AOP方式。 ### 1. 基于代理实现AOP切面编程 基于代理的AOP实现...
下面将详细介绍如何在Spring框架中使用AOP来实现日志记载。 1. **AOP基本概念** - **切面(Aspect)**:切面是关注点的模块化,如日志、事务管理等,它结合了业务逻辑与横切关注点。 - **通知(Advice)**:通知...
2. 编程式AOP:使用`Aspect`和`Pointcut`定义切面和切入点,然后在代码中手动调用`JoinPoint`进行通知执行。 在Spring MVC和Hibernate的结合应用中,我们可以利用AOP进行分页操作的优化。例如,可以在Service层方法...
通过这个Maven工程AOP实现的demo,我们学习了如何在Spring项目中使用注解进行AOP编程,包括定义切面、切入点、通知,并配置Spring以启用AOP。这种方式使得我们可以轻松地在不改动业务代码的情况下,插入横切关注点,...
在这个场景中,我们将使用Spring AOP来实现一个日志记录的功能,以追踪系统中各个方法的调用情况,包括访问时间以及传递的参数。下面将详细阐述如何实现这一目标。 首先,我们需要了解AOP的基本概念。AOP的核心是切...
在Spring框架中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式,它允许我们定义横切关注点,如日志、事务管理、权限检查等,然后将这些关注点与核心业务逻辑解耦。这篇教程将详细讲解...
通过这种方式,我们可以使用Spring AOP来实现对应用程序的监控日志,而无需侵入业务逻辑。这种解耦使得日志管理和维护变得更加灵活,同时也提高了代码的可读性和可维护性。 在实际项目中,`lib`文件夹通常包含项目...
总结,Spring AOP提供了一种优雅的方式,让我们可以在不侵入业务逻辑的前提下实现权限验证。通过定义切面、通知和切入点表达式,我们可以轻松地控制代码的执行流程,增强代码的可维护性和可扩展性。这个简单的示例...
1. **不使用AOP实现日志记录** 在没有AOP的情况下,我们通常会在每个方法的开始和结束处手动添加日志记录代码,如下所示: ```java public void doSomething() { System.out.println("开始执行doSomething"); // ...
在Spring Boot框架中,AOP(面向切面编程)是一种强大的设计模式,它允许程序员将关注点分离,比如日志、事务管理等,从核心业务逻辑中抽离出来。本指南将详细介绍如何通过注解来实现Spring Boot中的AOP。 首先,让...
在Java中,我们可以使用JDK的动态代理(Proxy)来实现AOP的功能,这主要涉及到反射和接口编程。 **JDK动态代理的工作原理** JDK的Proxy类提供了一种机制,可以创建一个代理对象,该对象在调用方法时会执行自定义的...
基于Annotation的AOP实现是Spring框架的一个重要特性,它极大地简化了AOP的使用。在本篇文章中,我们将深入探讨基于Annotation的AOP实现,特别是动态代理的理念。 首先,了解什么是AOP。AOP的核心概念是“切面”...
在上述代码中,当我们通过代理对象`proxyService`调用`doSomething()`方法时,实际上会先执行`MyInvocationHandler`中的`invoke()`方法,从而实现AOP的预处理(Before)和后处理(After)逻辑。 总结来说,通过JDK ...
它是一个实现了`org.springframework.aop.MethodBeforeAdvice`、`org.springframework.aop.AfterReturningAdvice`或`org.springframework.aop.ThrowsAdvice`等接口的对象,可以在方法调用前后执行自定义逻辑。...
在面向切面编程(Aspect Oriented Programming,简称AOP)中,我们关注的是横切关注点,即那些跨越多个对象和模块,与业务逻辑交织在一起但又相对独立的代码,如日志、事务管理、性能监控等。Spring框架提供了强大的...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者定义“切面”,这些切面可以包含业务逻辑的某一部分,比如日志、事务管理或安全控制。切面可以在多个对象中统一地应用,提高了代码的复用性...
4. 使用AOP:在业务代码中,当匹配的连接点被触发时,对应的切面通知将会自动执行。无需显式调用。 通过上述步骤,`myAOPExample`展示了如何在Spring中定义、配置和应用AOP。这使得我们可以轻松地在不修改原有业务...