1

在我的 Spring Application 中,以下是场景:

我有一个控制器A。另一个B用 scope 定义的bean 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。这样我就可以在本地访问它并获得一个新的实例。但是我该如何解决线程安全问题。
4

1 回答 1

1

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

@Service("name")
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
class B{
}
于 2013-02-03T11:25:27.140 回答