java中自定义切面_SpringBoot基于自定义注解实现切面编程

1、相关依赖包

org.springframework.boot

spring-boot-starter-aop

org.aspectj

aspectjrt

1.8.6

2、定义切面类

package com.bz.aspect;

import com.bz.service.SysLogOperationService;

import org.aspectj.lang.ProceedingJoinPoint;

import org.aspectj.lang.annotation.*;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

/**

* 操作日志,切面处理类

*/

@Aspect

@Component

public class LogOperationAspect {

@Autowired(required = false)

private SysLogOperationService sysLogOperationService;

@Pointcut("@annotation(com.bz.aspect.BzLogOperation)")

public void logPointCut() {

System.out.println("lllll");

}

/**

* 前置通知:方法执行前调用

*/

@Before("logPointCut()")

public void begin() {

System.out.println("前置通知:方法执行前调用");

}

/**

* 后置通知: 方法执行后调用,若方法出现异常,不执行

*/

@AfterReturning("logPointCut()")

public void afterReturning() {

System.out.println("后置通知: 方法执行后调用,若方法出现异常,不执行");

}

/**

* 最终通知:无论无何都会调用,类似于:try/catch中的finally

*/

@After("logPointCut()")

public void after() {

System.out.println("最终通知:无论无何都会调用,类似于:try/catch中的finally");

}

/**

* 异常通知:方法抛出异常时执行

*/

@AfterThrowing("logPointCut()")

public void afterThrowing() {

System.out.println("异常通知:方法抛出异常时执行");

}

/**

* 环绕通知

* 既可以在目标方法之前织入增强动作,也可以在执行目标方法之后织入增强动作;

* 可以决定目标方法在什么时候执行,如何执行,甚至可以完全阻止目标目标方法的执行;

* 可以改变执行目标方法的参数值,也可以改变执行目标方法之后的返回值; 当需要改变目标方法的返回值时,只能使用Around方法;

*/

@Around("logPointCut()")

public void around(ProceedingJoinPoint point) throws Throwable {

// 获取切点方法的名称

String methodName = point.getSignature().getName();

// 获取方法传入参数

Object[] params = point.getArgs();

//转成字符串

List objects = Arrays.asList(params);

objects.forEach(obj -> System.out.println(JSON.toJSONString(obj)));

System.out.println("环绕通知");

}

}

3、自定义切面注解类

package com.bz.aspect;

import java.lang.annotation.*;

/**

* @author: BuZheng

* @date: 2020-05-18 下午 2:02

*/

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface BzLogOperation {

String value() default "";

}

4、接口测试

@ApiOperation("切面测试")

@GetMapping("/aop")

@BzLogOperation("切面测试")

public ResultBean userList(@RequestParam(value = "keyWord") String keyWord) {

log.info("### 切面测试 ###");

return new ResultBean();

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值