WEB开发网
开发学院软件开发Java 设计 REST 风格的 MVC 框架 阅读

设计 REST 风格的 MVC 框架

 2010-01-08 00:00:00 来源:WEB开发网   
核心提示: 使用 $1、$2 ……来定义 URL 中的可变参数要比正则表达式更简单,我们需要在 MVC 框架内部将其转化为正则表达式,设计 REST 风格的 MVC 框架(3),以便匹配 URL,此外,对于 Spring 容器,可以通过 ApplicationContext 获得

使用 $1、$2 ……来定义 URL 中的可变参数要比正则表达式更简单,我们需要在 MVC 框架内部将其转化为正则表达式,以便匹配 URL。

此外,对于方法返回值,也未作强制要求。

集成 IoC

当接收到来自浏览器的请求,并匹配到合适的 URL 时,应该转发给某个 Controller 实例的某个标记有 @Mapping 的方法,这需要持有所有 Controller 的实例。不过,让一个 MVC 框架去管理这些组件并不是一个好的设计,这些组件可以很容易地被 IoC 容器管理,MVC 框架需要做的仅仅是向 IoC 容器请求并获取这些组件的实例。

为了解耦一种特定的 IoC 容器,我们通过 ContainerFactory 来获取所有 Controller 组件的实例,如清单 2 所示。


清单 2. 定义 ContainerFactory
public interface ContainerFactory { 
 
  void init(Config config); 
 
  List<Object> findAllBeans(); 
 
  void destroy(); 
} 

其中,关键方法 findAllBeans() 返回 IoC 容器管理的所有 Bean,然后,扫描每一个 Bean 的所有 public 方法,并引用那些标记有 @Mapping 的方法实例。

我们设计目标是支持 Spring 和 Guice 这两种容器,对于 Spring 容器,可以通过 ApplicationContext 获得所有的 Bean 引用,代码见清单 3。


清单 3. 定义 SpringContainerFactory
public class SpringContainerFactory implements ContainerFactory { 
  private ApplicationContext appContext; 
 
  public List<Object> findAllBeans() { 
    String[] beanNames = appContext.getBeanDefinitionNames(); 
    List<Object> beans = new ArrayList<Object>(beanNames.length); 
    for (int i=0; i<beanNames.length; i++) { 
      beans.add(appContext.getBean(beanNames[i])); 
    } 
    return beans; 
  } 
  ... 
} 

上一页  1 2 3 4 5 6 7 8  下一页

Tags:设计 REST 风格

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接