5

ディスパッチャーサーブレットを使用してSpring MVCでBeanオブジェクトが1つだけ作成されるか、リクエストごとに新しいオブジェクトが作成されることを理解できませんか?

コントローラーコード:-

コードでは、LoginBean オブジェクトにデータを設定し、メソッド abc の modelandview オブジェクトに設定しています。

次に、jsp で usename に値を入力していません。その場合、フォームを送信し、ハンドラー メソッド (initform) が呼び出されたときに、値を返さない同じ lb.getusername を出力しようとしています。概念を理解できません。

@Controller
public class LoginController{
ModelAndView mv=null;
EmployeeBean e=new EmployeeBean();
AutoBean autobean;
@Autowired
public LoginController(AutoBean autobean){
    System.out.println("autobean");

    this.autobean=autobean;
}
    @RequestMapping(value="/login")
    public ModelAndView abc(){

        System.out.println("here");
        System.out.println("here1");
        LoginBean lb=new LoginBean();
        lb.setUsename("ankita");//setting value
        return new ModelAndView("login","loginbean",lb);
    }

    @RequestMapping(value="/abc1",method=RequestMethod.POST)
    public ModelAndView initform(@ModelAttribute("loginbean")LoginBean      lb,BindingResult result,Model model){
        System.out.println("*****"+result.getErrorCount());
        System.out.println("hello");
        autobean.setName("yayme");
        System.out.println(autobean.getName());
        model.addAttribute("autobean", autobean);
        System.out.println("username"+lb.getUsename());// query??
        if(lb.getPassword().equals("ankita"))
        /*{
            mv=new ModelAndView();
            e.setId("1001");
            e.setName("ankita");
            mv.addObject("employee", e);
            mv.addObject("emp", new Emp());

            mv.setViewName("success");
            return mv;
        }*/
        return new ModelAndView("success","emp",new Emp());
        else
            return new ModelAndView("fail","lb1",lb);
    }

login.jsp

<form:form action="abc1" commandName="loginbean">
username:<form:input path="usename" />
password:<form:password path="password"/>
<input type="submit"/>
</form:form>

提案してください?

4

1 に答える 1

12

Spring のアプリケーション コンテキスト(インスタンス化から破棄までの Bean ライフサイクルの管理を担当する Bean IoC コンテナー) には、Bean 定義が含まれています他の属性の中でもこれらの定義には、いわゆる が含まれていますscope。このスコープには次の値を指定できます。

  • singleton- アプリケーションの存続期間中に Bean のインスタンスが 1 つだけ作成される
  • prototype- 誰かが ( ) この Bean を要求するたびにapplicationContext.getBean(...)、新しいインスタンスが作成されます

いくつかの特別なスコープを持つこともできます:

  • request- Bean のライフサイクルは HTTP リクエストにバインドされています
  • session- Bean ライフサイクルは HTTP セッションにバインドされます

独自のスコープを作成することもできます。Beanのデフォルトのスコープはsingleton. したがって、特に指定しない限り、Bean はsingleton(アプリケーションごとに 1 つのインスタンス) です。


のような注釈 (例: ) で注釈component-scanが付けられたクラスの which 検索を使用している場合、これらのクラスはアプリケーション コンテキストで Bean 定義として自動的に登録されます。デフォルトのスコープもそれらに適用されます。@Component@Controller

これらの自動登録された Bean のスコープを変更する場合は、@Scopeアノテーションを使用する必要があります。使用方法に興味がある場合は、その JavaDoc を確認してください。


TL;DRあなたLoginControllersingleton.

于 2013-06-12T19:47:12.977 に答える