技术开发 频道

Spring架构增强MultiActionController(下)

【IT168 专稿】

    5.实现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); } } } }
0
相关文章