0

私は引数に対して適切に機能する Spring 引数マッピングを持っていますが、残念ながら、DispatcherServlet を介して渡されないコンポーネントが 1 つあり、手動でマッピングを実行する方法を見つけるのに苦労しています。

例は次のようになります。

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 を常に取得したいことがわかっている場合は、Bean を URL にマッピングするのではなく、Spring にその Bean を要求し、メソッドを明示的に呼び出します (これは変わらないと仮定します)。

于 2012-09-10T15:55:04.540 に答える