利用注解@Aspect开发springAop中的切面

SpringAop注解概述
@Aspect	切面声明,标注在类、接口(包括注解类型)或枚举上。
@Pointcut	
切入点声明,即切入到哪些目标类的目标方法。

value 属性指定切入点表达式,默认为 "",用于被通知注解引用,这样通知注解只需要关联此切入点声明即可,无需再重复写切入点表达式

@Before	
前置通知, 在目标方法(切入点)执行之前执行。

value 属性绑定通知的切入点表达式,可以关联切入点声明,也可以直接设置切入点表达式

注意:如果在此回调方法中抛出异常,则目标方法不会再执行,会继续执行后置通知 -> 异常通知。

@After	后置通知, 在目标方法(切入点)执行之后执行
@AfterReturning	
返回通知, 在目标方法(切入点)返回结果之后执行,在 @After 的后面执行

pointcut 属性绑定通知的切入点表达式,优先级高于 value,默认为 ""

@AfterThrowing	
异常通知, 在方法抛出异常之后执行, 意味着跳过返回通知

pointcut 属性绑定通知的切入点表达式,优先级高于 value,默认为 ""

注意:如果目标方法自己 try-catch 了异常,而没有继续往外抛,则不会进入此回调函数

@Around	
环绕通知:目标方法执行前后分别执行一些代码,类似拦截器,可以控制目标方法是否继续执行。

通常用于统计方法耗时,参数校验等等操作。

环绕通知早于前置通知,晚于返回通知。

定义一个注解



@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AspectJS {
}

定义切面

@Component
@Aspect
public class AspecJPointCut {

    @Pointcut("@annotation(com.sz.config.AspectJS)")
    public void pointcut(){}

    @Before("pointcut()")
    public void before(){
        System.out.println("before 之前");
    }

    @After("pointcut()")
    public void After(){
        System.out.println("after   之后");
    }
}

用法

import com.sz.config.AspectJS;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class StudyController {

    @RequestMapping("/test")
    @AspectJS
    public void test(){
        System.out.println("test  方法");
    }
}

在这里插入图片描述

其中
@Pointcut("@annotation(com.sz.config.AspectJS)")
表示只要是在类或者方法上加上@AspectJS这个注解,那么就会被拦截执行切面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值