您的位置:首页 > 编程语言 > Java开发

Spring学习历程---使用注解方式入门AOP

2016-11-20 19:46 721 查看
使用AOP时,一般要先引入aop命名空间



xml里面加入<aop:aspect-autoproxy/>,启动对@AspectJ的支持.

注解举例:

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;
/**
* 切面
*
*/
@Aspect
public class MyInterceptor {
@Pointcut("execution (* cn.itcast.service.impl.PersonServiceBean.*(..))")
private void anyMethod() {}//声明一个切入点

@Before("anyMethod() && args(name)")
public void doAccessCheck(String name) {
System.out.println("前置通知:"+ name);
}
@AfterReturning(pointcut="anyMethod()",returning="result")
public void doAfterReturning(String result) {
System.out.println("后置通知:"+ result);
}
@After("anyMethod()")
public void doAfter() {
System.out.println("最终通知");
}
@AfterThrowing(pointcut="anyMethod()",throwing="e")
public void doAfterThrowing(Exception e) {
System.out.println("例外通知:"+ e);
}

@Around("anyMethod()")
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
//if(){//判断用户是否在权限
System.out.println("进入方法");
Object result = pjp.proceed();
System.out.println("退出方法");
//}
return result;
}

}
@Aspect声明一个切面

@Pointcut("execution (* cn.itcast.service..*.*(..))")
private void anyMethod() {}//声明一个切入点

第一个*表示返回值任意 ,随后是包名 ,".."表示其所有子包,".*"表示所有方法,"(..)"表示任意参数。对这些方法进行拦截。

然后写上前置通知。 args(name)是获得传入参数。

pointcut="anyMethod()" , returning="res"  获得返回值。

throwing ="e" 可以获得抛出的异常。

@Aspect
public class MyInterceptor {
@Pointcut("execution (* com.springStudy.NaiveWaiter.*(..))")
private void anyMethod() {}

@Before("anyMethod()&&args(name)")
public void doAccessCheck(String name) {
System.out.println("前置通知"+name);
}
@AfterReturning(pointcut="anyMethod()",returning="res")
public void doAfterReturn(String res)
{
System.out.println("后置通知"+res);
}
@After("anyMethod()")
public void doAfter()
{
System.out.println("最终通知");
}
@AfterThrowing(pointcut="anyMethod()",throwing="e")
public void doAfterThrowing(Exception e)
{
System.out.println("异常通知"+e);
}
@Around("anyMethod()")
public Object doBasicProFiling(ProceedingJoinPoint pjp) throws Throwable
{
System.out.println("环绕前方法,进入方法");
Object o=pjp.proceed();
System.out.println("环绕后方法,退出方法");
return o;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息