Tôi muốn sử dụng một bean nguyên mẫu có chú thích trong bộ điều khiển của mình. Nhưng mùa xuân đang tạo ra một hạt singleton thay thế. Đây là mã cho điều đó:
@Component
@Scope("prototype")
public class LoginAction {
private int counter;
public LoginAction(){
System.out.println(" counter is:" + counter);
}
public String getStr() {
return " counter is:"+(++counter);
}
}
Mã điều khiển:
@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;
}
}
Mẫu vận tốc:
LoginAction counter: ${loginAction.str}
Spring config.xml
có chức năng quét thành phần được kích hoạt:
<context:annotation-config />
<context:component-scan base-package="com.springheat" />
<mvc:annotation-driven />
Tôi đang nhận được một số lượng tăng lên mỗi lần. Không thể tìm ra tôi đang sai ở đâu!
Cập nhật
Theo đề xuất của @gkamal , tôi đã HomeController
webApplicationContext
biết và nó đã giải quyết được vấn đề.
mã cập nhật:
@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");
}
}