use*_*636 1 java spring spring-mvc
我无法确定使用调度程序servlet在spring mvc中仅创建了一个bean对象,还是对每个请求都创建了一个新对象?
控制器代码:-
在代码中,我将在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);
}
Run Code Online (Sandbox Code Playgroud)
login.jsp
<form:form action="abc1" commandName="loginbean">
username:<form:input path="usename" />
password:<form:password path="password"/>
<input type="submit"/>
</form:form>
Run Code Online (Sandbox Code Playgroud)
请提出建议?
Spring的应用程序上下文(在豆IoC容器,它负责从实例化管理bean的生命周期它的破坏)包含bean定义。这些定义以及其他属性包含所谓的scope。该范围可以具有以下值:
singleton -在应用程序生存期内仅创建一个Bean实例prototype-每当有人向(applicationContext.getBean(...))询问此Bean时,都会创建一个新实例您还可以具有一些特殊的作用域:
request -bean生命周期绑定到HTTP请求session -bean生命周期绑定到HTTP会话您甚至可以创建自己的范围。Beansingleton的默认范围是。因此,如果没有另外指定,则Bean为singleton(每个应用程序单个实例)。
如果您正在使用component-scan哪些搜索来标记带有@Component-like注释的类(例如@Controller),那么这些类将自动注册为应用程序上下文中的bean定义。默认范围也适用于它们。
如果要更改这些自动注册的bean的范围,则必须使用@Scope注释。如果您对如何使用它感兴趣,请检查其JavaDoc。
TL; DR您LoginController是singleton。
| 归档时间: |
|
| 查看次数: |
6225 次 |
| 最近记录: |