`
隐形的翅膀
  • 浏览: 497378 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AOP 学习, 包围通知

阅读更多
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-mysql-demo

    定义了AOP切面,这通常是一个包含通知(advice)的类,比如前置通知(before advice)可以在数据库操作前执行,后置通知(after advice)可以在操作完成后执行,环绕通知(around advice)可以包围整个方法调用。...

    Spring IOC、AOP实现代码,可调试查看内部原理,简单易懂

    3. **通知类型**:Spring支持五种通知类型:前置通知、后置通知、异常通知、最终通知和环绕通知,它们分别在目标方法执行前、后、抛出异常时、无论是否抛出异常之后以及包围整个方法调用时执行。 4. **代理模式**:...

    aop实战.rar

    7. **环绕通知**:环绕通知是最强大的通知类型,可以完全包围方法的执行,通常用于性能监控,比如记录方法执行时间,文档中的"环绕通知打印调用代码时间"即为此类应用。 8. **AOP用法**:文档可能会详细介绍如何...

    基于xml配置的aop.zip

    在IT行业中,面向切面编程(Aspect Oriented Programming,简称AOP)是一种强大的设计模式...通过学习和理解这些示例项目,开发者可以更好地掌握Spring AOP,从而更有效地管理横切关注点,提高代码的可维护性和可读性。

    spring 2.0使用AOP实例(基于Annotation的配置方式)

    通过阅读提供的压缩包中的`src`目录,你可以找到具体的代码实现,进一步理解并学习如何在实际项目中应用这些概念。这包括了切面类的定义、注解的使用,以及可能的配置文件等内容。通过实践,你将更深入地掌握Spring...

    AOP.rar_cours

    通知可以是前置通知(before advice)、后置通知(after advice)、返回通知(return advice)、异常通知(throw advice)和环绕通知(around advice),分别在方法调用前、后、返回时、抛出异常时以及包围方法执行...

    Java的Spring框架下的AOP编程模式示例共6页.p

    5. 环绕通知(Around Advice):完全包围了方法的调用,可以决定是否执行目标方法,以及何时返回。 在Spring中实现AOP有两种方式:基于注解的AOP和基于XML配置的AOP。现在,大多数项目倾向于使用注解,因为它更简洁...

    Spring aop.rar

    - 环绕通知(Around Advice):完全包围一个方法调用,可以在方法调用前后插入自定义的行为。 2. **切入点(Pointcut)**:定义了通知何时应该被执行的规则。切入点表达式可以基于方法名、注解、包名等条件来匹配...

    02-01-05-一步一步手绘Spring AOP运行时序图1

    学习Spring AOP的过程中,深入阅读源码可以帮助我们更深刻地理解其内部工作原理。需要注意的是,由于Spring框架庞大且复杂,一次性掌握所有内容可能需要一定的时间和精力。因此,建议先从基本概念和执行流程入手,...

    经典的AOP模型,真的很好啊!真的哈啊啊

    通过学习和掌握Spring AOP,开发者可以更好地组织代码,降低模块间的耦合,提升代码的复用性和可维护性。在日常开发中,合理地运用面向切面编程能有效地提高软件质量,减少重复代码,使项目结构更加清晰。所以,无论...

    使用动态代理面向切面编程(AOP)

    - 环绕通知:包围目标方法的整个执行过程,可以控制是否执行目标方法。 8. **切入点表达式** - 切入点表达式是AOP的核心,它定义了通知应该在何时何地应用。例如,`@Before("execution(* com.example.service.*.*...

    声明环绕通知

    与前置通知(before)、后置通知(after)、返回通知(after-returning)和异常通知(after-throwing)不同,环绕通知可以包围一个方法的整个生命周期,包括调用方法之前和之后的行为。它通过`@Around`注解实现,...

    11.23-aoptrangle-5

    例如,我们可能定义一个`@Before`通知,它在计算面积的方法执行前运行,或者一个`@Around`通知,它包围整个方法执行过程,提供更灵活的控制。 具体实现可能如下: 1. 定义一个接口`Triangle`,其中包含一个`...

    Spring 学习笔记四

    - 环绕通知(Around advice):完全包围一个方法调用,可以在调用前后执行自定义逻辑。 2.4 切点(Pointcut) 切点是通知将被应用到的方法或类。 2.5 AOP代理 Spring支持两种代理:JDK动态代理和CGLIB代理。JDK...

    sunkaixuan-AopSugar-master.zip

    AOP(Aspect Oriented Programming,面向切面编程)是一种编程...通过研究项目的源代码,我们可以学习如何更高效地利用Spring AOP,或者了解作者如何对AOP进行抽象和封装,以便在实际开发中更好地应用面向切面编程。

    spring小练习

    4. **环绕通知(Around,spring_AOP_5_around)**:环绕通知是AOP中最强大的通知类型,它可以包围整个方法调用,包括方法执行前后及异常处理。因此,它可以控制方法的执行流程,如记录方法耗时、异常处理等。 5. **...

    学习(markdown.zip

    - **核心概念**:切面、通知、连接点、切入点表达式。 ## 3. Spring Boot - **优势**:简化Spring应用的初始设置,内置Tomcat服务器,自动配置。 - **起步依赖** (Starter POMs):简化Maven配置。 ## 4. Spring ...

    Aspectj

    - `around`(环绕通知):包围目标方法的整个执行过程,可以在调用前后执行自定义逻辑。 - `after`(最终通知):无论目标方法是否抛出异常,都会在方法执行后运行。 5. **织入(Weaving)**: 织入是将切面与主...

    春a

    通过学习这个仓库,开发者可以深入理解Spring AOP的内部实现,包括如何定义切面、通知、匹配规则,以及代理的创建过程。此外,这个仓库可能还包含示例代码和测试用例,帮助开发者快速上手并熟练运用Spring AOP。 在...

Global site tag (gtag.js) - Google Analytics