是否有一个新的bean对象创建与每个请求在spring mvc



我无法理解只有一个bean对象是在spring mvc中使用调度器servlet创建的,或者每个请求都创建一个新对象?

控制器代码:

在代码中,我在LoginBean对象中设置数据,并在方法abc中的modelandview对象中设置数据。

然后在jsp中,我没有为用户名输入任何值,在这种情况下,当我提交表单时,当处理程序方法(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>

请建议?

Spring的应用程序上下文 ( bean IoC容器,负责管理从实例化到销毁的bean生命周期)包含bean定义。这些定义和其他属性包含所谓的scope。这个作用域可以有以下值:

  • singleton—在应用程序生命周期内仅创建一个bean实例
  • prototype -每次有人请求(applicationContext.getBean(...))这个bean时,一个新的实例被创建

你也可以有一些特殊的作用域:

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

你甚至可以创建你自己的作用域。bean的默认作用域是singleton 。因此,如果您不指定其他方式,bean是singleton(每个应用程序单个实例)。


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

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


TL;博士 LoginController singleton

最新更新