首页 / 软件开发 / JAVA / Spring架构增强MultiActionController(下)
Spring架构增强MultiActionController(下)2011-03-26klyuan5.实现MultiMethodControllerUrlHandlerMapping我们在上面讨论过了怎么实现MultiMethodControllerUrlHandlerMapping,要实现为 具体的代码,我们可以通过扩展 org.springframework.web.servlet.handler.AbstractUrlHandlerMapping。 AbstractUrlHandlerMapping扩展了 org.springframework.web.context.support.WebApplicationObjectSupport。 WebApplicationObjectSupport可以获得当前WebApplicationContext。1. 重写initApplicationContext方法,在context中查找所有MultiActionController 类型的bean,把MultiActionController的urlMethodmappings属性的key值为key值, MultiActionController实例为键值的键值对添加到一个urlMap中。public class MultiMethodControllerUrlHandlerMapping extends AbstractUrlHandlerMapping...{
private Map urlMap = new HashMap();
public void initApplicationContext() throws BeansException ...{
initialUrlMap();
}
protected void initialUrlMap()throws BeansException...{
//找查所有MultiMethodController类型和子类型的bean到一个map中,bean Name 为key值 ,bean实例为value值
Map matchingBeans = BeanFactoryUtils.beansOfTypeIncludingAncestors(
getWebApplicationContext(),
MultiMethodController.class, true, false);
List controllers = null;
if(!matchingBeans.isEmpty())...{
controllers = new ArrayList(matchingBeans.values());
for(int i = 0; controllers != null && i < controllers.size();i++)...{
MultiMethodController controller = (MultiMethodController) controllers.get(i);
Properties urlPros = controller.getUrlMethodmappings();
Iterator itr = urlPros.keySet().iterator();
for(;itr.hasNext();)...{
String url = (String)itr.next();
urlMap.put(url,controller);
}
}
}
}