【问题标题】:Spring MVC request and prototype scope not workingSpring MVC 请求和原型范围不起作用
【发布时间】:2013-01-25 07:15:17
【问题描述】:

在我的 Spring 应用程序中,以下是场景:

我有一个控制器A。另一个 bean B 使用范围 Request 定义。

@Service("name")
@Scope("request")
class B{
   private String name;
   public void init(String name){
     this.name = name
}
}

@Controller
class A{

@Autowired
@Qualifier("name")
B ob;

//using B
}
  1. 现在,当我运行应用程序时,出现无法创建新 bean 的异常。
  2. 如果我将范围更改为prototype。如果我为每个请求打印 B 的 hashCode,我会得到相同的输出,这意味着它不会为每个请求注入新对象。
  3. 如果解决了以上问题,仍然不是线程安全的,因为ob 引用将指向一个新的原型对象或请求对象,而其他处理的请求将引用新的B 对象。最好的方法是获取对主要 Spring MVC 应用程序上下文的引用,然后从方法内部获取 getBean。这样我就可以在本地访问它并获得一个新的实例。但是如何解决线程安全问题。

【问题讨论】:

    标签: java spring-mvc scope


    【解决方案1】:

    @Controller 在单例范围内。使用代理 bean。

    @Service("name")
    @Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
    class B{
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-22
      • 2012-11-27
      • 1970-01-01
      • 2018-08-06
      • 2014-05-15
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      • 2014-06-12
      相关资源
      最近更新 更多