• 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();  
        }  
    }
  • 相关阅读:
    MySQL索引,事务及存储引擎
    SpringBoot整合Swagger
    Android 逆向之安全防护基本策略
    C现代方法(第8章)笔记——数组
    【从部署服务器到安装autodock vina】
    通过内网穿透实现远程连接群晖Drive,轻松实现异地访问群晖NAS
    2023腾讯云标准型S5云服务器简单测评,比较值!
    rv1126-rv1109-yaffs2-mkyaffs2image610
    Java—字节流
    27、JavaScript学习笔记——查看及操控窗口
  • 原文地址:https://blog.csdn.net/qq_25073223/article/details/127815803