• 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();  
        }  
    }
  • 相关阅读:
    一张图帮你看懂,在浏览器输入网址回车后,都发生了什么?
    Html5+Css3第一讲:html5+Css3基础(1)
    python第一个接口返回的数据作为第二个接口的参数
    多极神经元红蓝铅笔手绘,多极神经元手绘图作业
    Angular:单向数据流
    解决SpringBoot整合Mybatis和Mybatis-Plus不能公用(版本兼容性问题)
    骨灰级大 BOOS 总结出内部不传之密:多线程高并发笔记 + 视频版
    聊一聊TypeScript的相关知识点
    Linux系统安全及应用
    d中声明式gui
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/127815803