2016-06-13 15 views
1

私はSpring MVCの流れを理解していません。ここで私が直面している疑問がいくつかあります。spring-mvcでリクエストパラメータのバインディングと型変換は誰が行いますか?

@RequestMapping(value = "/addUser",method = RequestMethod.POST) 
public ModelAndView addUser(@RequestParam("name") String name, @RequestParam("age") Integer age) 
{ 
     // demo method 

} 
  • 方法nameageフィールドが結合されていますか?私は誰がそれをやっているのです(どんな迎撃器ですか?)
  • 誰がageフィールドを整数に解析していますか?
  • 誰がバインドしていますかUser@ModelAttribute以下の例でマークされているオブジェクトはありますか?

モデルはどのように我々は、上記の方法でHttpSessionのオブジェクトを取得している

@RequestMapping(method = RequestMethod.POST, value = "doLogin") 
public ModelAndView doLogin(@ModelAttribute("user") User userModel, HttpSession httpSession) 
{ 

} 
  • を結合属性?私はフローワイズを意味する。
  • 春にコンポーネントの範囲がSingletonの場合、私のWebアプリケーションにアクセスする1000人のユーザーがいる場合、すべてのユーザーが異なるオブジェクトを取得するわけではありませんか?それではどうですかsingleton?あなたは@RequestMappingと方法、RequestMappingHandlerAdapter意志register built-in argument resolversに注釈を付ける

答えて

6
  1. ハンドラメソッドの引数がスキャンされ、型または注釈に基づいて適切な引数リゾルバが起動します。たとえば、@RequestParam注釈の場合は、RequestParamMethodArgumentResolverが呼び出されます。

  2. さらに、変換リゾルバは、変換およびバインディングを適切にガイドします。変換は、ConverterまたはPropertyEditorの適切な実装によって処理されます。バインディングは、DataBinderの適切なインスタンスによって処理されます。 RequestParamMethodArgumentResolverの場合、例えば、 @RequestParam("age")NumberEditorは変換をガイドし、WebDataBinderはバインディングをガイドします。あなたはあなたの例を持っている

異なる場合は、上記の流れのすべての対象であるが、異なる引数のリゾルバは、例えばにキックシングルトンのジレンマについて

(カスタムタイプのカスタムものを登録することができ、またはUserのデフォルトコンストラクタがなどと呼ばれます)で編集キックのModelAttributeMethodProcessor、異なるコンバータ、それは、コンポーネントの単一のインスタンスを指し、コンポーネントのインスタンス変数のみに関係します。メソッドと引数は新しいインスタンスにすることはOKですが、シングルトンの観点からは何の役割も果たしません

+0

シングルトンの部分は分かりませんでした。私はUserモデルを持っていると考えています。異なる値を持つユーザーがいるたびに、どのようにSingletonですか? – piechuckerr

+0

'User'オブジェクトはSpringコンポーネントではなく、そのライフサイクルが例えばSpringコンポーネントのように管理されるBeanではありません。コントローラのクラス、サービス、または例えば注釈付きの他のもの。 @コンポーネント、@リポジトリ、@サービス。 'User'クラスはシングルトンではありません –

+0

遅く返事をして申し訳ありませんが、' User'クラスのクラス定義には '@ Component'というアノテーションが付けられています。要求されたマッピングされた 'User'はSpringコンテナによって構築されたリクエストと同じですか? – piechuckerr

関連する問題