当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

Spring AOP demo (maven)

发表于: 2015-06-02   作者:千年松鼠   来源:转载   浏览:
摘要: 可以直接运行test 项目见附件 package com.xxp.aoptest.aspects; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.asp
可以直接运行test
项目见附件


package com.xxp.aoptest.aspects;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class MyAspect {

	@Pointcut(value="execution(* com.xxp.aoptest.programs.*.*(..)) && args(value)")//匹配com.xxp.aoptest.programs包中的所有类中的所有方法,并获得形参value
//	@Pointcut(value="execution(* com.xxp.aoptest.programs.MyProgram.show(..))")//匹配com.xxp.aoptest.programs.MyProgram类中的所有show()方法(任意个参数) --pointcut2
//	@Pointcut(value="execution(* com.xxp.aoptest.programs.MyProgram.show(String))")//匹配com.xxp.aoptest.programs.MyProgram类中的所有show(String value)方法 --pointcut3
	public void showPoint(String value){}//声明切入点,方法名showPoint(value)为该切入点名称
	/* 注意 
	 * 如果不需要传递参数,则通知方法也要对应。(比如用以上pointcut3时,切入点也应修改为public void showPoint(){})
	 * */	

	@Before(value="showPoint(value)")//value值为切入点名称
	public void doBefore(JoinPoint joinPoint,String value) throws Throwable{
		System.out.println("before value="+value);
		joinPoint.getArgs();//也可以用这个方法获得所有参数,这是就不需要在pointcut中使用args匹配了
	}
	
	@After(value="showPoint(value)")
	public void doAfter(JoinPoint joinPoint,String value){
		System.out.println("after value="+value);
		
	}
	
	@AfterReturning(value="showPoint(value)",returning="returnValue")
	public void doAfterReturning(int returnValue,String value){
		System.out.println("after returning:"+returnValue);
	}
	
	@AfterThrowing(value="showPoint(value)",throwing="error")
	public void doAfterThrowing(JoinPoint joinPoint,Throwable error,String value){
		System.out.println("error:"+error);
	}
	
	@Around("showPoint(value)")
	public void doAround(ProceedingJoinPoint proceedingJoinPoint,String value) throws Throwable{
		System.out.println("around start");
		proceedingJoinPoint.proceed();
//		proceedingJoinPoint.proceed(new Object[]{"reValue"});//将value的值改为reValue
		System.out.println("around end");
	}
}



package com.xxp.aoptest.programs;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MyProgram {

	@RequestMapping(value="/show",method=RequestMethod.GET)
	@ResponseBody
	public int show(String value){
		System.out.println("MyProgram show("+value+")");
		String test = "test";
		if (value.equals("SB")) {
			throw new RuntimeException();
		}
		value = "GNB";
		return 1;
	}
	
	public int show(){
		System.out.println("MyProgram show()");
		String test = "test";
		return 1;
	}
	
	
	
}

Spring AOP demo (maven)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
做了个Spring Aop的Demo,记录一下。 在Sping Bean的基础上,增加“观众”的角色,观众在观看表演之
Spring Framework Reference Documentation给出的那么正式和确切的术语总给人一种很复杂的感觉。闲
1、概述 2、AOP术语介绍 <img src="http://img.it610.com/image/info2/65b77c24fe4
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Progr
PrintBean.java //接口 /** * */ package org.spring.aop.service; /** * @author * */ public inte
前段时间使用AOP做日志拦截,由于很长时间没有使用过AOP了,在开发过程中遇到各种各样的问题,都快
对AOP的概念一直是蒙蒙融融的。而且看Spring的文档上面对AOP的叙述还是不够清楚。 甚至看了文档还是
PrintBean.java //接口 /** * */ package org.spring.aop.service; /** * @author * */ public inte
AOP : 面向切面、面向方面、面向接口,是一种横切技术。 Servlet技术中的Filter、Struts2中的Interc
对AOP的概念一直是蒙蒙融融的。而且看Spring的文档上面对AOP的叙述还是不够清楚。 甚至看了文档还是
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号