springMVC原始碼分析--ControllerBeanNameHandlerMapping(八)
阿新 • • 發佈:2019-01-05
在上一篇部落格springMVC原始碼分析--AbstractControllerUrlHandlerMapping(六)中我們介紹到AbstractControllerUrlHandlerMapping定義了抽象方法buildUrlsForHandler,接下來我們看看在其子類ControllerBeanNameHandlerMapping中的實現。
ControllerBeanNameHandlerMapping中buildUrlsForHandler的實現如下,還是講beanName及其別名作為url
generatePathMapping函式中的實現是給beanName加上以下字首等。@Override protected String[] buildUrlsForHandler(String beanName, Class<?> beanClass) { List<String> urls = new ArrayList<String>(); urls.add(generatePathMapping(beanName)); String[] aliases = getApplicationContext().getAliases(beanName); for (String alias : aliases) { urls.add(generatePathMapping(alias)); } return StringUtils.toStringArray(urls); }
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實現的功能很簡單,就是將beanName及其別名作為url返回。
ControllerBeanNameHandlerMapping原始碼如下:
public class ControllerBeanNameHandlerMapping extends AbstractControllerUrlHandlerMapping { private String urlPrefix = ""; private String urlSuffix = ""; public void setUrlPrefix(String urlPrefix) { this.urlPrefix = (urlPrefix != null ? urlPrefix : ""); } public void setUrlSuffix(String urlSuffix) { this.urlSuffix = (urlSuffix != null ? urlSuffix : ""); } //通過beanName構造url陣列 @Override protected String[] buildUrlsForHandler(String beanName, Class<?> beanClass) { List<String> urls = new ArrayList<String>(); urls.add(generatePathMapping(beanName)); String[] aliases = getApplicationContext().getAliases(beanName); for (String alias : aliases) { urls.add(generatePathMapping(alias)); } return StringUtils.toStringArray(urls); } //給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(); } }