设计 REST 风格的 MVC 框架
2010-01-08 00:00:00 来源:WEB开发网对于 Guice 容器,通过 Injector 实例可以返回所有绑定对象的实例,代码见清单 4。
清单 4. 定义 GuiceContainerFactorypublic class GuiceContainerFactory implements ContainerFactory {
private Injector injector;
public List<Object> findAllBeans() {
Map<Key<?>, Binding<?>> map = injector.getBindings();
Set<Key<?>> keys = map.keySet();
List<Object> list = new ArrayList<Object>(keys.size());
for (Key<?> key : keys) {
Object bean = injector.getInstance(key);
list.add(bean);
}
return list;
}
...
}
类似的,通过扩展 ContainerFactory,就可以支持更多的 IoC 容器,如 PicoContainer。
出于效率的考虑,我们缓存所有来自 IoC 的 Controller 实例,无论其在 IoC 中配置为 Singleton 还是 Prototype 类型。当然,也可以修改代码,每次都从 IoC 容器中重新请求实例。
设计请求转发
和 Struts 等常见 MVC 框架一样,我们也需要实现一个前置控制器,通常命名为 DispatcherServlet,用于接收所有的请求,并作出合适的转发。在 Servlet 规范中,有以下几种常见的 URL 匹配模式:
/abc:精确匹配,通常用于映射自定义的 Servlet;
*.do:后缀模式匹配,常见的 MVC 框架都采用这种模式;
/app/*:前缀模式匹配,这要求 URL 必须以固定前缀开头;
更多精彩
赞助商链接