• ControllerBeanNameHandlerMapping类功能简介说明


    转自:

    ControllerBeanNameHandlerMapping类功能简介说明

    下文笔者将讲述ControllerBeanNameHandlerMapping类的相关说明,如下所示:

    ControllerBeanNameHandlerMapping是AbstractControllerUrlHandlerMapping的实现类
     通过声明在Web应用程序环境中的控制器类型来注册处理器映射的
    它从控制器的Bean名字转换出控制器所服务的URL Pattern
    这个转换规则是,把Bean名字加上前缀和后缀构成URL Pattern
    然后,使用得到的Pattern匹配请求的URL
    如果匹配成功,则使用匹配的Bean作为处理器返回
    

    buildUrlsForHandler() beanName及其别名作为url

    @Override  
    protected String[] buildUrlsForHandler(String beanName, Class beanClass) {  
    	Listurls = new ArrayList();  
    	urls.add(generatePathMapping(beanName));  
    	String[] aliases = getApplicationContext().getAliases(beanName);  
    	for (String alias : aliases) {  
    		urls.add(generatePathMapping(alias));  
    	}  
    	return StringUtils.toStringArray(urls);  
    }
    

    generatePathMapping() beanName加上以下前缀等

    protected String generatePathMapping(String beanName) {  
    	String name = (beanName.startsWith("/") ? beanName : "/" + beanName);  
    	StringBuilder path = new StringBuilder();  
    	if (!name.startsWith(this.urlPrefix)) {  
    		path.append(this.urlPrefix);  
    	}  
    	path.append(name);  
    	if (!name.endsWith(this.urlSuffix)) {  
    		path.append(this.urlSuffix);  
    	}  
    	return path.toString();  
    }
    

    ControllerBeanNameHandlerMapping源码说明

    public class ControllerBeanNameHandlerMapping extends AbstractControllerUrlHandlerMapping {  
        private String urlPrefix = "";  
        private String urlSuffix = "";  
      
        @Override  
        protected String[] buildUrlsForHandler(String beanName, Class beanClass) {  
            Listurls = new ArrayList();  
              
            // 根据Bean名产生URL Pattern  
            urls.add(generatePathMaping(beanName));  
              
            // 对于Bean名的别名,以同样的规则产生URL Pattern  
            String[] aliases = getApplicationContext().getAliases(beanName);  
            for (String alias : aliases) {  
                urls.add(generatePathMapping(alias));  
            }  
              
            // 返回URL Pattern数组  
            return StringUtils.toStringArray(urls);  
        }  
        /** 
         * Prepends a '/' if required and appends the URL suffix to the name. 
         */  
        protected String generatePathMapping(String beanName) {  
            // 如果bean名不是以斜线(/)开头,则增加斜线(/)  
            String name = (beanName.startsWith("/") ? beanName : "/" + beanName);  
            StringBuilder path = new StringBuilder();  
              
            // 添加前缀  
            if (!name.startsWith(this.urlPrefix)) {  
                path.append(this.urlPrefix);  
            }  
              
            path.append(name);  
              
            // 添加后缀  
            if (!name.endsWith(this.urlSuffix)) {  
                path.append(this.urlSuffix);  
            }  
            return path.toString();  
        }  
    }
  • 相关阅读:
    c++ 学习之运算符重载 之 <<
    Combobox后台绑定
    08. 机器学习- 线性回归
    [尚硅谷React笔记]——第9章 ReactRouter6
    安全保护策略:iOS应用程序代码保护的关键步骤和技巧
    Vue2 零基础入门 Vue2 零基础入门第三天 3.2 计算属性 && 3.3 vue-cli
    RabbitMQ-发布确认(高级)、零碎概念(幂等性/惰性队列/集群)
    集合(Set)和有序集合(ZSet)的基本使用方法详解【Redis】
    Java 编译和反编译
    索引!索引!!索引!!!到底什么是索引?
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/127815803