专栏首页码匠的流水账spring获取controller方法中自定义注解的信息

spring获取controller方法中自定义注解的信息

本文主要聊一下如何在spring容器启动时,获取有自定义注解的方法信息。

RequestMappingHandlerMapping

spring-webmvc-4.3.10.RELEASE-sources.jar!/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.java

public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMapping
        implements MatchableHandlerMapping, EmbeddedValueResolverAware {

    private boolean useSuffixPatternMatch = true;

    private boolean useRegisteredSuffixPatternMatch = false;

    private boolean useTrailingSlashMatch = true;

    private ContentNegotiationManager contentNegotiationManager = new ContentNegotiationManager();

    private StringValueResolver embeddedValueResolver;

    private RequestMappingInfo.BuilderConfiguration config = new RequestMappingInfo.BuilderConfiguration();

    //....
}
  • getHandlerMethods spring-webmvc-4.3.10.RELEASE-sources.jar!/org/springframework/web/servlet/handler/AbstractHandlerMethodMapping.java /** * Return a (read-only) map with all mappings and HandlerMethod's. */ public Map<T, HandlerMethod> getHandlerMethods() { this.mappingRegistry.acquireReadLock(); try { return Collections.unmodifiableMap(this.mappingRegistry.getMappings()); } finally { this.mappingRegistry.releaseReadLock(); } } 主要用到这个getHandlerMethods方法

Map</requestmappinginfo,handlermethod></requestmappinginfo,handlermethod>

for(Map.Entry<RequestMappingInfo,HandlerMethod> entry : urlMethodMapping.entrySet()){

            RequestMappingInfo info = entry.getKey();
            HandlerMethod handlerMethod = entry.getValue();
            Method method = handlerMethod.getMethod();

            if(!method.isAnnotationPresent(DemoAnno.class)){
                continue;
            }

            DemoAnno demoAnno = method.getAnnotation(DemoAnno.class);
            //......
        }

通过这个HandlerMethod就可以获取具体的请求的方法,然后利用反射去判断是否有标注自己所需要的注解。

启动时处理

实现ApplicationListener接口,在

@Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        //.......
    }

在onApplicationEvent中去处理 这样就大功告成了

本文分享自微信公众号 - 码匠的流水账(geek_luandun)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 聊聊SimpleCanalConnector的getWithoutAck

    本文主要研究一下SimpleCanalConnector的getWithoutAck

    codecraft
  • 聊聊SimpleCanalConnector的getWithoutAck

    本文主要研究一下SimpleCanalConnector的getWithoutAck

    codecraft
  • 聊聊nacos ServiceManager的updateInstance

    本文主要研究一下nacos ServiceManager的updateInstance

    codecraft
  • 如何优雅地在Redis中使用Lua

    今天讲一些redis和lua脚本的相关的东西,lua这个脚本是一个好东西,可以运行在任何平台上,也可以嵌入到大多数语言当中,来扩展其功能。lua脚本是用C语言写...

    黄泽杰
  • CPU 是怎样工作的?[每日前端夜话0x89]

    CPU,也被称为微处理器,是计算机的大脑。让我们通过深入了解计算机的核心,来帮助自己有效地编写计算机程序。

    疯狂的技术宅
  • 数组最大最小值与一个数组push到另外一个数组

    Math.max 可以实现得到数组中最大的一项,支持Math.max(param1,param2,param3…),不支持Math.max([param1,pa...

    tianyawhl
  • 人行85号文对产业各方交易系统的改造点分析

    中国人民银行发布《关于进一步加强支付结算管理防范电信网络新型违法犯罪有关事项的通知》(85号文),要求进一步加强支付监管,防范电信网络诈骗。该《通知》内容主要涉...

    金融民工小曾
  • Jerry和您聊聊Chrome开发者工具

    Chrome开发者工具是Jerry日常工作使用的三大调试器之一。虽然工具名称前面带了个”开发者”, 但是它对非开发人员仍然有用。不信?

    Jerry Wang
  • Google Chrome 68 一次堪比小型安全软件的更新

    Google Chrome 在 7 月 24 日再次低调更新至版本 68.0.3440.75,这次更新绝对不单单是“标记出不安全 HTTP 网站”而已,除了这个...

    明月云服务
  • 【捷报】微信红包除夕收发总量是去年8倍 成春节社交互动标配

    编者注:微信红包踏入第三年,在腾讯的海量服务体系支撑下,今年已经站稳在90亿的新高峰,再次刷新历史! 爆竹声中一岁除,红包送暖入屠苏。 2月8日(大年初一)微信...

    腾讯大讲堂

扫码关注云+社区

领取腾讯云代金券