AOP主要方法

本文详细介绍了如何在Spring Boot项目中使用AOP,包括引入依赖、创建自定义注解ViewRecords,以及实现各种通知类型(前置、后置、返回后和异常通知)的示例。通过@ViewRecords注解标记方法,展示了如何在执行前后添加业务逻辑增强。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        上一篇简单说了下aop的基本概念,想必大家对aop都有了基本的认识。接下来主要讲解下aop的使用。

                1、首先引入依赖

<!-- aop切面 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

           2、创建一个自定义的注解

@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewRecords {
    long id() default  1L;

}

                3、实现aop

@Slf4j
@Aspect
@Component
public class AnnotationAop {

    //定义切点,注解作为切入点
    @Pointcut("@annotation(com.qcby.teaching.msgmanage.annotation.ViewRecords)")
    public void viewRecordsPoinCut() {

    }
    /**
     * before 目标方法执行前执行,前置通知
     * after 目标方法执行后执行,后置通知
     * after returning 目标方法返回时执行 ,后置返回通知
     * after throwing 目标方法抛出异常时执行 异常通知
     * around 在目标函数执行中执行,可控制目标函数是否执行,环绕通知
     */

    @Before("viewRecordsPoinCut()")
    public void before(JoinPoint joinPoint) throws Throwable {
        log.info("进入Before通知....");
    }

    @After("viewRecordsPoinCut()")
    public void after(JoinPoint joinPoint) throws Throwable {
        log.info("进入After通知....");
    }

    @AfterReturning("viewRecordsPoinCut()")
    public void afterReturning(JoinPoint joinPoint) throws Throwable {
        log.info("进入AfterReturning通知....");
    }

    @AfterThrowing("viewRecordsPoinCut()")
    public void afterThrowing(JoinPoint joinPoint) throws Throwable {
        log.info("进入AfterThrowing通知....");
    }



    @Around("viewRecordsPoinCut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        log.info("进入Around通知....前");
        //从切面织入点处通过反射机制获取织入点处的方法
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        //获取切入点所在的方法
        Method method = signature.getMethod();

        //获取注解信息
        ViewRecords viewRecords = method.getAnnotation(ViewRecords.class);
        Long idValue = viewRecords.id();
        log.info("idValue的值为:{}",idValue);
        Long id = null;

        //获取切入点方法参数
        Object[] objects = joinPoint.getArgs();
        String[] paramNames =  signature.getParameterNames();
        for (int i =0;i<paramNames.length;i++){
            if (Objects.equals("id",paramNames[i]) && objects[i] != null){
                id = Long.valueOf(objects[i].toString());
            }
        }
        log.info("id的值为:{}",id);
        /**
         * 进行业务操作
         */

        // 执行目标方法
        Object r  = joinPoint.proceed();
        /**
         * 目标方法执行完毕之后,执行的业务增强操作
         */
        log.info("进入Around通知....后");
        return r;
    }

      在方法前加上自定义的注解,  这样aop就可以使用了。

        

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

herrybody

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值