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); } } }}
顺境的美德是节制,逆境的美德是坚韧,这后一种是较为伟大的德性。