컨트롤러에 주석이 달린 프로토 타입 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;
}
}
속도 템플릿 :
LoginAction counter: ${loginAction.str}
스프링 config.xml
은 컴포넌트 스캐닝을 가능하게한다 :
<context:annotation-config />
<context:component-scan base-package="com.springheat" />
<mvc:annotation-driven />
매번 증가하는 횟수를 받고 있습니다. 내가 어디로 잘못 가고 있는지 알 수 없습니다!
최신 정보
@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");
}
}