0

我的参数有一个工作良好的 Spring 参数映射,不幸的是,我有一个组件没有通过 DispatcherServlet 传递,我很难找到一种方法让映射以某种方式手动运行。

一个示例如下所示:

public class Bar {
    public Bar(@RequestParam("map") String map) {
        System.out.println("Found: " + map); // Expected result "Found: value
    }
}
public class Foo {
   public static void main(String[] args) {
          context = new ClassPathXmlApplicationContext("META-INF/context.xml");
          String pseudoUrl = "/?map=value"
          Bar bar = context.getBeans('bar', pseudoUrl);
   }
}

它可以以某种方式起作用吗?正如您可以想象的那样,传递的数据具有更复杂的结构,因此我想避免自己编写解析器。

干杯。

4

1 回答 1

0

DispatcherServlet.doDispatch()您基本上可以遵循相同的算法:

  1. 对于上下文中的每个HandlerMapping,(spring-webmvc.jar 3.1.2-RELEASE 中 DispatcherServlet 的第 1058 行),测试是否HandlerMapping.getHandler(request)返回非 null
  2. 对于上下文中的每个 HandlerAdapter,(第 1091 行)测试是否HandlerAdapter.supports(handlerMapping)返回 true
  3. 执行HandlerAdapter.handle(request, ...)并处理输出(第 923 行)

这将要求您将您的 pseudoUrl 捆绑到一个伪 HttpServletRequest 等中。

另一方面,如果您知道总是想从main()方法中的上下文中获取特定的 bean,我只会向 Spring 请求该 bean 并显式调用该方法,而不是处理将 bean 映射到 URL(我假设不变)。

于 2012-09-10T15:55:04.540 回答