资讯专栏INFORMATION COLUMN

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

null1145 / 1284人阅读

摘要:序本文主要聊一下如何在容器启动时,获取有自定义注解的方法信息。主要用到这个方法通过这个就可以获取具体的请求的方法,然后利用反射去判断是否有标注自己所需要的注解。启动时处理实现接口,在在中去处理这样就大功告成了

本文主要聊一下如何在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 getHandlerMethods() {
        this.mappingRegistry.acquireReadLock();
        try {
            return Collections.unmodifiableMap(this.mappingRegistry.getMappings());
        }
        finally {
            this.mappingRegistry.releaseReadLock();
        }
    }

主要用到这个getHandlerMethods方法

Map
for(Map.Entry 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中去处理
这样就大功告成了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67950.html

相关文章

  • SpringMVC数据转换

    摘要:数据绑定负责将中的信息以一定的方式转换并绑定到处理方法的参数上。整个过程的处理核心是由完成。数据转换在语言中,在包中提供了一个接口来进行数据转换,的核心功能是将一个转换为一个对象。 数据绑定 SpringMVC负责将request中的信息以一定的方式转换并绑定到处理方法的参数上。整个过程的处理核心是由DataBinder完成。转换流程如下:1.DataBinder从ServletReq...

    DrizzleX 评论0 收藏0
  • SpringMVC【校验器、统一处理异常、RESTful、拦截器】

    摘要:只要有一个拦截器不放行,不能执行完成号不放行和号不放行测试结果总结只有前边的拦截器方法放行,下边的拦截器的才执行。至于他们的拦截器链的调用顺序,和的是没有差别的。 前言 本博文主要讲解的知识点如下: 校验器 统一处理异常 RESTful 拦截器 Validation 在我们的Struts2中,我们是继承ActionSupport来实现校验的...它有两种方式来实现校验的功能 手写...

    marser 评论0 收藏0
  • Spring Boot中自定义注解+AOP实现主备库切换

    摘要:示例代码如下添加的设置默认的配置对应的是原来的如何使用注解从主库到备库的切换 摘要: 本篇文章的场景是做调度中心和监控中心时的需求,后端使用TDDL实现分表分库,需求:实现关键业务的查询监控,当用Mybatis查询数据时需要从主库切换到备库或者直接连到备库上查询,从而减小主库的压力,在本篇文章中主要记录在Spring Boot中通过自定义注解结合AOP实现直接连接备库查询。 一.通过A...

    zhisheng 评论0 收藏0
  • 慕课网_《SpringBoot进阶之Web进阶》学习总结

    摘要:时间年月日星期日说明本文部分内容均来自慕课网。慕课网教学示例源码个人学习源码第一章课程介绍课程介绍本课程紧接着小时学会课程,请先看入门课。异常返回通知在连接点抛出异常后执行。 时间:2017年3月19日星期日说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com教学示例源码:https://github.com/zccodere/s...个人学习源码:htt...

    lifefriend_007 评论0 收藏0
  • [Spring cloud 一步步实现广告系统] 7. 中期总结回顾

    摘要:在前面的过程中,我们创建了个服务发现我们使用作为服务发现组件,学习了的使用。加依赖加注解改配置使用项目三部曲,我们可以快速添加一个新组件,并正常使用这个我没有在项目中实现,但是大家可以和一样,三部曲搞定。 在前面的过程中,我们创建了4个project: 服务发现 我们使用Eureka 作为服务发现组件,学习了Eureka Server,Eureka Client的使用。 Eureka...

    cnsworder 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<