手动触发Spring参数映射?

时间:2012-09-10 15:32:21

标签: java spring

我为我的参数设置了一个很好的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);
   }
}

它可以以某种方式起作用吗?因为你可以成像传递的数据有一个更复杂的结构,因此我想避免我自己编写一个解析器。

干杯。

1 个答案:

答案 0 :(得分:0)

您基本上可以遵循DispatcherServlet.doDispatch() does

的相同算法
  1. 对于上下文中的每个HandlerMapping,(spring-webmvc.jar 3.1.2-RELEASE中DispatcherServlet的第1058行),测试HandlerMapping.getHandler(request)是否返回非空
  2. 对于上下文中的每个HandlerAdapter,(第1091行)测试HandlerAdapter.supports(handlerMapping)是否返回true
  3. 执行HandlerAdapter.handle(request, ...)并处理输出(第923行)
  4. 这将要求您将伪Url捆绑为伪HttpServletRequest等。

    另一方面,如果你知道你总是希望从main()方法中的上下文中获取特定的bean,我只会向Spring询问该bean并明确调用该方法,而不是处理将bean映射到URL(我假设它没有改变)。