使用java aop实现自定义注解

本文展示了如何在Java中创建并使用自定义注解配合AspectJ实现方法拦截,通过@Around注解处理环绕通知,以及@AfterReturning处理方法返回后的逻辑。示例中,自定义注解用于标记需要进行特定操作的方法,如日志记录或缓存处理。当注解应用于方法时,切面能够正确地拦截并处理这些方法。然而,注解不能直接作用于非public方法,导致在getUser方法上失效。
摘要由CSDN通过智能技术生成

直接干代码:

注解类:

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

切面类:

@Aspect
@Component
public class LogAspect {

    @Around(value = "@annotation(systemLog)")
    public Object checkLogin(ProceedingJoinPoint join, SystemLog systemLog) throws Throwable
    {

        // 获得被注解的方法的执行结果
        Object ret = join.proceed();
        System.out.println(JSONObject.toJSONString(ret));
        // 下面是验证登录身份的逻辑代码 省略。。。。。。。
        return null;
    }
}

测试类:

@RestController
@RequestMapping("/test")
public class TestController {
    @SystemLog
    @GetMapping("/test")
    public Object test(String name){
        return this.getUser();
    }


    public User getUser() {
        return new User("kuangji","1234567");
    }
}

打印结果:

存在的问题:自定义的注解 只能放在test方法上,如果放在 getUser方法上 会失效,这是为什么呢?

@AfterReturning案例:

切面类:

@Aspect
@Component
/**
 * description: RetryAspect
 * @date: 2020/11/11 15:57
 * @author: yinyu
 */
public class InsertRedisAop {


    @Pointcut("@annotation(com.thingsmatrix.securepc.device.annotation.InsertRedis)")
    public void retryPointCut() {
    }

    /**
     *  方法执行结束后 进行缓存操作
     * @throws Throwable
     */
    @AfterReturning(value = "retryPointCut() && @annotation(insertRedis)",returning = "result")
    public void after(InsertRedis insertRedis, Object result) {
        String key = insertRedis.key();

    }

注解类:

@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InsertRedis {
    String key() default "6666";
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值