@Scope("prototype")表示 bean 的作用域不会创建新的 bean。
@Scope("prototype")表示 bean 的作用域不会创建新的 bean。
我想在我的控制器中使用一个带注解的原型Bean。但是Spring仅仅创建了一个单例Bean。以下是代码:
@Component @Scope("prototype") public class LoginAction { private int counter; public LoginAction(){ System.out.println(" counter is:" + counter); } public String getStr() { return " counter is:"+(++counter); } }
控制器代码:
@Controller public class HomeController { @Autowired private LoginAction loginAction; @RequestMapping(value="/view", method=RequestMethod.GET) public ModelAndView display(HttpServletRequest req){ ModelAndView mav = new ModelAndView("home"); mav.addObject("loginAction", loginAction); return mav; } public void setLoginAction(LoginAction loginAction) { this.loginAction = loginAction; } public LoginAction getLoginAction() { return loginAction; } }
Velocity模板:
LoginAction counter: ${loginAction.str}
Spring的config.xml
启用了组件扫描:
我每次都会获得一个增加的计数值。无法找出我错在哪里了!
更新
如@gkamal所建议的那样,我使HomeController
成为webApplicationContext
。这解决了问题。
更新后的代码:
@Controller public class HomeController { @Autowired private WebApplicationContext context; @RequestMapping(value="/view", method=RequestMethod.GET) public ModelAndView display(HttpServletRequest req){ ModelAndView mav = new ModelAndView("home"); mav.addObject("loginAction", getLoginAction()); return mav; } public LoginAction getLoginAction() { return (LoginAction) context.getBean("loginAction"); } }
admin 更改状态以发布 2023年5月21日