@Scope("prototype") bean scope not creating new bean

Я хочу использовать аннотированный prototype bean в моем контроллере. Но spring создает вместо него синглтонный боб. Вот код для этого:

@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-aware и это решило проблему.

обновленный код:

@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");
    }
}

120
задан thlim 7 February 2018 в 07:32
поделиться