2012-09-10 37 views
0

我有一个很好的工作春参数映射为我的参数,不幸的是我有一个组件不通过DispatcherServlet,我很难找到一种方法来让映射以某种方式手动运行。手动触发Spring参数映射?

一个例子是这样的:

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); 
    } 
} 

它的东西可能以某种方式工作?由于您可以对传递的数据进行映像,因此结构更复杂,因此我想避免我自己写一个解析器。

干杯。

回答

0

你可以基本上遵循相同的算法,DispatcherServlet.doDispatch() does

  1. 在上下文中的每个HandlerMapping,(在弹簧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()方法从上下文特定的豆,我只会向Spring请求该bean并显式调用该方法,而不是将映射bean映射到URL(我认为这不会改变)。

+0

其实我是希望找到某事的。更轻量级:( – pagid

+0

是你想要查找的URL是否为常量? –

+0

nope - 实际上我处于SolrComponent的中间,我想提取(搜索)请求URL的某些部分并将其传递给我的域模型的一小部分...这就是为什么我有一个没有servlet上下文的URL:/ – pagid