广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >spring 重复注解和aop拦截的实现示例
  • 786
分享到

spring 重复注解和aop拦截的实现示例

spring重复注解springaop拦截 2020-09-23 03:09:25 786人浏览 绘本
摘要

前言:   1:jdk1.8开始支持重复注解@Repeatable实现   2:aop拦截需要拦截当前注解和@Repeatable指向的包装注解才可以完全拦截到,因为:1.当在在方法上只有一个注解时,aop拦截认为是非包装类型注解。2.当方

前言:

  1:jdk1.8开始支持重复注解@Repeatable实现

  2:aop拦截需要拦截当前注解和@Repeatable指向的包装注解才可以完全拦截到,因为:1.当在在方法上只有一个注解时,aop拦截认为是非包装类型注解。2.当方法上有多个重复注解时,aop拦截认为是包装类型注解。 

重复注解实现方式(RequestLimit为原始注解,RequestLimitPack为包装注解):


import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Repeatable(RequestLimit.RequestLimitPack.class)
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestLimit {

    
    int maxTimes();

    
    int seconds();

    @Target({ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @interface RequestLimitPack {
        RequestLimit[] value();
    }
}

重复注解效果:

 

aop拦截(设置了两处@Around):


@Aspect
@Configuration
public class RequestLimitAop {
    private static final Logger LOGGER = LoggerFactory.getLogger(RequestLimitAop.class);

    public static final String Redis_SPLIT_STR = "#";
    public static final String SUB_MODULE = "api";

    @Pointcut(value = "@annotation(com.zxy.product.hr.sync.WEB.config.annotation.RequestLimit)")
    public void pointcut() {
    }

    @Pointcut(value = "@annotation(com.zxy.product.hr.sync.web.config.annotation.RequestLimit" +
            ".RequestLimitPack)")
    public void pointcutRequestLimitOuts() {
    }


    @Around(value = "pointcut()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        // 获取拦截的方法名
        MethodSignature msig = (MethodSignature) joinPoint.getSignature();
        // 获取到注解
        RequestLimit requestLimit = msig.getMethod().getAnnotation(RequestLimit.class);

        ResultInfo resultInfo = checkFrequency(requestLimit, false);
        if (ResultInfo.isSuccess(resultInfo)) {
            // 继续执行方法
            return joinPoint.proceed();
        } else {
            return resultInfo;
        }
    }

    @Around(value = "pointcutRequestLimitOuts()")
    public Object aroundRequestLimitOuts(ProceedingJoinPoint joinPoint) throws Throwable {
        // 获取拦截的方法名
        MethodSignature msig = (MethodSignature) joinPoint.getSignature();
        // 获取到注解
        RequestLimit.RequestLimitPack requestLimitPack = msig.getMethod()
                .getAnnotation(RequestLimit.RequestLimitPack.class);
        for (RequestLimit requestLimit : requestLimitPack.value()) {
            ResultInfo resultInfo = checkFrequency(requestLimit, false);
            if (!ResultInfo.isSuccess(resultInfo)) {
                //失败立即返回
                return resultInfo;
            }
        }
        //没问题则继续执行
        return joinPoint.proceed();
    }


    public static ResultInfo checkFrequency(RequestLimit requestLimit, boolean isInnerApi) {
     //代码忽略......
    }

}



到此这篇关于spring 重复注解和aop拦截的实现示例的文章就介绍到这了,更多相关spring 重复注解和aop拦截内容请搜索编程界以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程界!

--结束END--

本文标题: spring 重复注解和aop拦截的实现示例

本文链接: https://www.lsjlt.com/news/80.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • spring 重复注解和aop拦截的实现示例
    前言:   1:jdk1.8开始支持重复注解@Repeatable实现   2:aop拦截需要拦截当前注解和@Repeatable指向的包装注解才可以完全拦截到,因为:1.当在在方法上只有一个注解时,aop拦截认为是非包装类型注解。2.当方...
    99+
    2020-09-23
    spring 重复注解 spring aop拦截
  • Spring AOP 实现自定义注解的示例
    目录1. 注解如下:2. 切面自工作后,除了一些小项目配置事务使用过 AOP,真正自己写 AOP 机会很少,另一方面在工作后还没有写过自定义注解,一直很好奇注解是怎么实现他想要的功能...
    99+
    2022-11-12
  • SpringBoot中利用AOP和拦截器实现自定义注解
    目录前言Spring实现自定义注解1.引入相关依赖2.相关类Java实现自定义注解通过Cglib实现通过JDk动态代理实现Cglib和JDK动态代理的区别写在最后前言 最近遇到了这样...
    99+
    2022-11-13
  • SpringBoot中怎么利用AOP和拦截器实现自定义注解
    本篇内容主要讲解“SpringBoot中怎么利用AOP和拦截器实现自定义注解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringBoot中怎么利用AOP和拦截器实现自定义注解”吧!Spri...
    99+
    2023-07-02
  • spring中的拦截器怎么利用注解实现
    本篇文章给大家分享的是有关spring中的拦截器怎么利用注解实现,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。类似用户权限的需求,有些操作需要登录,有些操作不需要,可以使用过滤...
    99+
    2023-05-31
    spring
  • SpringBoot使用自定义注解实现权限拦截的示例
    本文介绍了SpringBoot使用自定义注解实现权限拦截的示例,分享给大家,具体如下:HandlerInterceptor(处理器拦截器)常见使用场景 日志记录: 记录请求信息的日志, 以便进行信息监控, 信息统计, 计算PV(page ...
    99+
    2023-05-31
    springboot 权限拦截
  • Spring实现泛型注入的示例详解
    目录1.Spring泛型注入2. 关于java泛型有四种TypeGenericArrayType泛型数组类型ParameterizedType参数化类型TypeVariable 类型...
    99+
    2022-11-13
  • SSM项目中使用拦截器和过滤器的实现示例
    一、拦截器概述 Spring MVC 也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定 的功能,自定义的拦截器必须实现 HandlerInterceptor 接口 ...
    99+
    2022-11-12
  • Spring AOP实现复杂的日志记录操作(自定义注解)
    目录Spring AOP复杂的日志记录(自定义注解)第一步第二步第三步第四步多个注解可以合并成一个,包括自定义注解比如说SpringMVC的注解Spring AOP复杂的日志记录(自...
    99+
    2022-11-12
  • spring boot Mybatis 拦截器实现拼接sql和修改的代码详解
    定义一个 SqlIntercepor 类 import com.culturalCenter.placeManage.globalConfig.Interface.Intercept...
    99+
    2022-11-13
  • Java注解机制之Spring自动装配实现原理的示例分析
    小编给大家分享一下Java注解机制之Spring自动装配实现原理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! Java中使用注解的情况主要在SpringMVC(Spring Boot等),注解实际上相...
    99+
    2023-05-31
    java spring
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作