注解方式的拦截器大全

/**
* Copyright (C), 2015-2019, XXX有限公司
* FileName: InterAspect
* Author: java
* Date: 2019/2/23 23:19
* Description:
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
package aop.aspect;

import com.rl.spring.model.Person;
import javafx.scene.chart.ValueAxis;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;

/**
* 〈一句话功能简述〉<br>
* 〈〉
*
* @author java
* @create 2019/2/23
* @since 1.0.0
*/
@Aspect
public class InterAspect {
//将这个包下面的对象加入到动态代理对象执行方法里面去
@Pointcut("execution(* beAop..*.*(..))")
public void listMethod(){
}

//当默认继承切点时候 根据切点参数表达式 进行方法拦截 如果是..表示拦截任意有参或者无参的业务方法
// 如果处理器不设置参数表示根据切点的原则进行拦截 如果切点是.. 那么执行的实例bean方法都会被拦截
@Before(value = "listMethod()")
public void preAdive(){
System.out.println("执行前置通知");
System.out.println("------------------------------------------");
}
//这里指定了拦截有参的业务方法
@Before(value = "listMethod()&&args(parm)")
public void preAdive1(Person parm){
//这里的方法是传入到业务方法里面去的 先提前拦截
System.out.println("专门执行有参数的前置通知");
System.out.println(parm);
System.out.println("------------------------------------------");

}
@Before(value = "listMethod()&&args(parm1,parm2)")
public void twoFun(Person parm1,Person parm2 ){
System.out.println("拦截两个");

System.out.println("------------------------------------------");
}
@AfterReturning(pointcut = "listMethod()")
public void dd(){
System.out.println("返回值获取到了");
}
@After(value = "listMethod()")
public void after(){
System.out.println("后置通知");
}

@AfterReturning(pointcut = "listMethod()",returning = "person")
public void dd1(Person person){

System.out.println("返回值对象值"+person);
}
@AfterReturning(pointcut = "listMethod()",returning = "i")
public void dd2(int i){

System.out.println("返回值对象值"+i);

}
@Around("listMethod()")
public Object rund(ProceedingJoinPoint joinPoint) {
System.out.println("执行环绕通知");

Object obj = null;
try {
obj = joinPoint.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return obj ;
}

}

猜你喜欢

转载自www.cnblogs.com/classmethond/p/10426713.html
今日推荐