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();
}
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


