举例说明SpringAOP各个概念

系好安全再带发车

下面是我在工作中遇到的一个报表导出功能中的其中一个报表设置接口,这个接口我要做权限校验,所以做了前置增强/通知。通过这个接口跟大家介绍SpringAOP各个概念

切面

切面:被@Aspect标记 放增强逻辑的类

// 切面
@Aspect
@Component
public class PermissionAspect {

    // 切点
    @Pointcut("@annotation(com.baijia.gaotu.mojito.inf.annotation.PermissionTag)")
    private void validate() {
    }
	// 通知
    @Before("validate()&&@annotation(permissionTag)")
    public void validatePermission(JoinPoint joinPoint, PermissionTag permissionTag) {
       
    }

}

连接点

程序执行过程中的一个时间点,如方法的执行或异常的处理,简单理解为被CPU执行的某一坨业务代码,被切面切的代码,需要被增强的代码

@PostMapping("/set")
@ApiOperation("报表设置")// 这是swagger的注解 标志这个接口是干啥的
@PermissionTag(tag = "总监权限")// 配合切入点(pointcut)使用
public RestResponse<Void> set(@RequestBody @Valid ReportSetDTO reportSetDTO) {
    return service.doSomething();// 调用service层
}

通知/建议

增强逻辑 扩展逻辑的一坨代码

@Before("validate()&&@annotation(permissionTag)")// AspectJ表达式 声明这一坨增强逻辑在连接点业务代码执行之前执行
public void validatePermission(JoinPoint joinPoint, PermissionTag permissionTag) {
	// 在这里写校验逻辑
	if(!用户权限列表.contains("总监权限")){
		throw new Exception("不是总监不能进来哦");
	}
}

切点

表明我的切面想搞的目标是谁,我的切面要切谁

@Pointcut("@annotation(PermissionTag)")// 我要切被@PermissionTag注解标记的代码
private void validate() {
	// 空方法
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值