spring-aop(二)

@Pointcut:定义切点

如:

@Pointcut("execution(* spider.ungeturl.*(..))")

则该切点会拦截在包spider下的类ungeturl中所有的方法

@Before:前advice

@Before("pointcut()")

该声明的意思是这个advice会在切点pointcut()拦截的方法执行前执行

@Afterthrowing:抛出异常advice

@Afterthrowing(pointcut="pointcut()",throwing="ret")
public void ex(Object ret)

这个advice会在抛出异常后执行,并将抛出的异常传给advice。这里throwing的值要对应于advice中的某个参数名,这样这个值才能被传给advice

@Around:可以理解成环绕advice吧

@Around("pointcut()")
public Object deal(ProceedingJoinPoint pjp,...)

around要注意的一点就是,其advice的形参列表必须以ProceedingJoinPoint开始。这个类可以看做是当前的Join Point,其下有很多有用的方法,可以获取当前Join Point的许多有关数据。

获取Join Point的传入参数:

@After("logPointCut() && args(stream,url,fileName)")
	public void addLog(InputStream stream,String url,int fileName)


改变Join Point的返回值:

@Around("anyMethod()")
	public Object addLog(ProceedingJoinPoint j)throws Throwable{
		System.out.println("----in addLog method----");
		System.out.println("===checkSecurity==="+j.getSignature().getName());
		
		System.out.println("===change the return arg values===");
		Object object = j.proceed();
		object = "Jessica 1989-03-14";
		return object;

这里最好建议在IDE下开发,因为IDE特有的提示功能可以对不熟悉的类进行提示,帮助人迅速上手

你可能感兴趣的:(AOP,annotation,spring-aop,spring基于注解配置)