1. 包围通知 性能测试
org.aopalliance.intercept.MethodInterceptor
综合了前置通知和后置通知, 除了一个重要区别, 我们可以修改方法的返回值, 还可以阻止目标方法的执行,可以将目标方法的实现换成新的代码
public class MessageWriter {
public void showMessage(){
System.out.println("this is a test");
}
}
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.springframework.util.StopWatch;
public class AroundInterceptor implements MethodInterceptor{
public Object invoke(MethodInvocation invocation) throws Throwable{
StopWatch sw=new StopWatch();
sw.start(invocation.getMethod().getName());
Object retVal=invocation.proceed();
sw.stop();
dumpInfo(invocation,sw.getTotalTimeMillis());
return retVal;
}
private void dumpInfo(MethodInvocation invocation,long ms){
java.lang.reflect.Method m=invocation.getMethod();
Object target=invocation.getThis();
Object[] args=invocation.getArguments();
System.out.println("Execute method: "+m.getName());
System.out.println("On Object of type: "+target.getClass().getName());
System.out.println("with arguments: ");
for(int x=0;x<args.length;x++){
System.out.println(" >"+args[x]);
System.out.print("\n");
}
System.out.println("took :"+ms + " ms");
}
}
import org.springframework.aop.framework.ProxyFactory;
public class test {
public static void main(String[] args) {
MessageWriter target =new MessageWriter();
ProxyFactory pf=new ProxyFactory(target);
pf.addAdvice(new AroundInterceptor());
MessageWriter proxy=(MessageWriter)pf.getProxy();
proxy.showMessage();
}
}
结果
this is a test
Execute method: showMessage
On Object of type: MessageWriter
with arguments:
took :0 ms
分享到:
相关推荐
定义了AOP切面,这通常是一个包含通知(advice)的类,比如前置通知(before advice)可以在数据库操作前执行,后置通知(after advice)可以在操作完成后执行,环绕通知(around advice)可以包围整个方法调用。...
3. **通知类型**:Spring支持五种通知类型:前置通知、后置通知、异常通知、最终通知和环绕通知,它们分别在目标方法执行前、后、抛出异常时、无论是否抛出异常之后以及包围整个方法调用时执行。 4. **代理模式**:...
7. **环绕通知**:环绕通知是最强大的通知类型,可以完全包围方法的执行,通常用于性能监控,比如记录方法执行时间,文档中的"环绕通知打印调用代码时间"即为此类应用。 8. **AOP用法**:文档可能会详细介绍如何...
在IT行业中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式...通过学习和理解这些示例项目,开发者可以更好地掌握Spring AOP,从而更有效地管理横切关注点,提高代码的可维护性和可读性。
通过阅读提供的压缩包中的`src`目录,你可以找到具体的代码实现,进一步理解并学习如何在实际项目中应用这些概念。这包括了切面类的定义、注解的使用,以及可能的配置文件等内容。通过实践,你将更深入地掌握Spring...
通知可以是前置通知(before advice)、后置通知(after advice)、返回通知(return advice)、异常通知(throw advice)和环绕通知(around advice),分别在方法调用前、后、返回时、抛出异常时以及包围方法执行...
5. 环绕通知(Around Advice):完全包围了方法的调用,可以决定是否执行目标方法,以及何时返回。 在Spring中实现AOP有两种方式:基于注解的AOP和基于XML配置的AOP。现在,大多数项目倾向于使用注解,因为它更简洁...
- 环绕通知(Around Advice):完全包围一个方法调用,可以在方法调用前后插入自定义的行为。 2. **切入点(Pointcut)**:定义了通知何时应该被执行的规则。切入点表达式可以基于方法名、注解、包名等条件来匹配...
学习Spring AOP的过程中,深入阅读源码可以帮助我们更深刻地理解其内部工作原理。需要注意的是,由于Spring框架庞大且复杂,一次性掌握所有内容可能需要一定的时间和精力。因此,建议先从基本概念和执行流程入手,...
通过学习和掌握Spring AOP,开发者可以更好地组织代码,降低模块间的耦合,提升代码的复用性和可维护性。在日常开发中,合理地运用面向切面编程能有效地提高软件质量,减少重复代码,使项目结构更加清晰。所以,无论...
- 环绕通知:包围目标方法的整个执行过程,可以控制是否执行目标方法。 8. **切入点表达式** - 切入点表达式是AOP的核心,它定义了通知应该在何时何地应用。例如,`@Before("execution(* com.example.service.*.*...
与前置通知(before)、后置通知(after)、返回通知(after-returning)和异常通知(after-throwing)不同,环绕通知可以包围一个方法的整个生命周期,包括调用方法之前和之后的行为。它通过`@Around`注解实现,...
例如,我们可能定义一个`@Before`通知,它在计算面积的方法执行前运行,或者一个`@Around`通知,它包围整个方法执行过程,提供更灵活的控制。 具体实现可能如下: 1. 定义一个接口`Triangle`,其中包含一个`...
- 环绕通知(Around advice):完全包围一个方法调用,可以在调用前后执行自定义逻辑。 2.4 切点(Pointcut) 切点是通知将被应用到的方法或类。 2.5 AOP代理 Spring支持两种代理:JDK动态代理和CGLIB代理。JDK...
AOP(Aspect Oriented Programming,面向切面编程)是一种编程...通过研究项目的源代码,我们可以学习如何更高效地利用Spring AOP,或者了解作者如何对AOP进行抽象和封装,以便在实际开发中更好地应用面向切面编程。
4. **环绕通知(Around,spring_AOP_5_around)**:环绕通知是AOP中最强大的通知类型,它可以包围整个方法调用,包括方法执行前后及异常处理。因此,它可以控制方法的执行流程,如记录方法耗时、异常处理等。 5. **...
- **核心概念**:切面、通知、连接点、切入点表达式。 ## 3. Spring Boot - **优势**:简化Spring应用的初始设置,内置Tomcat服务器,自动配置。 - **起步依赖** (Starter POMs):简化Maven配置。 ## 4. Spring ...
- `around`(环绕通知):包围目标方法的整个执行过程,可以在调用前后执行自定义逻辑。 - `after`(最终通知):无论目标方法是否抛出异常,都会在方法执行后运行。 5. **织入(Weaving)**: 织入是将切面与主...
通过学习这个仓库,开发者可以深入理解Spring AOP的内部实现,包括如何定义切面、通知、匹配规则,以及代理的创建过程。此外,这个仓库可能还包含示例代码和测试用例,帮助开发者快速上手并熟练运用Spring AOP。 在...