zoukankan      html  css  js  c++  java
  • @Scope("prototype") bean scope not creating new bean

    代码

    @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;
        }
    }
    
    @Component
    @Scope("prototype")
    public class LoginAction {
    
      private int counter;
    
      public LoginAction(){
        System.out.println(" counter is:" + counter);
      }
      public String getStr() {
        return " counter is:"+(++counter);
      }
    }
    

    问题

    为什么将LoginAction 配置为 @Scope("prototype"),在 HomeController 调用的时候并没有每次new一个实例出来?

    原因

    其实很简单,LoginAction 是 @Scope("prototype"), 但 HomeController 并不是(默认是单例)。
    @Scope("prototype") 意思是每次你向spring要一个instance的时候,它都会为你new一个。

    解决

    在本例中,如果每次调用都需要一个new一个instance的话,可以使用getBean方法。

    context.getBean(..)
    

    或者Spring 2.5之后,可以使用ScopedProxyMode控制

    @Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS) 
    

    参考

    https://stackoverflow.com/questions/7621920/scopeprototype-bean-scope-not-creating-new-bean

  • 相关阅读:
    ajax传json
    JSON 转 VO
    字符串转数组
    "No 'Access-Control-Allow-Origin' header"跨域问题CROS
    jdbc连接SQLServer
    Jquery判断checkbox选中状态
    JSON与null
    点击劫持
    Eclipse 入手配置
    SQL练习(一)
  • 原文地址:https://www.cnblogs.com/talentzemin/p/15037138.html
Copyright © 2011-2022 走看看