5

我无法理解在 spring mvc 中使用调度程序 servlet 只创建了一个 bean 对象,或者每个请求都会创建一个新对象?

控制器代码:-

在代码中,我在 LoginBean 对象中设置数据并将其设置在方法 abc 中的模型和视图对象中。

然后在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);
    }

登录.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 IoC 容器,负责管理 bean 从实例化到销毁的生命周期)包含 bean 定义。这些定义以及其他属性包含所谓的. 此范围可以具有以下值:scope

  • singleton- 在应用程序生命周期内只创建一个 bean 实例
  • prototype- 每次有人向 ( applicationContext.getBean(...)) 请求此 bean 时,都会创建一个新实例

你也可以有一些特殊的范围:

  • request- bean 生命周期绑定到 HTTP 请求
  • session- bean 生命周期绑定到 HTTP 会话

您甚至可以创建自己的范围。bean的默认范围是singleton. 因此,如果您没有另外指定,则 bean 是singleton(每个应用程序单个实例)。


如果您使用component-scanwhich 搜索带有@Component-like 注释(例如@Controller)的类,那么这些类会自动注册为应用程序上下文中的 bean 定义。默认范围也适用于它们。

如果要更改这些自动注册 bean 的范围,则必须使用@Scope注释。如果您对如何使用它感兴趣,请查看它的 JavaDoc。


TL;DRLoginController的是singleton

于 2013-06-12T19:47:12.977 回答