【发布时间】: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
}
- 现在,当我运行应用程序时,出现无法创建新 bean 的异常。
- 如果我将范围更改为
prototype。如果我为每个请求打印 B 的 hashCode,我会得到相同的输出,这意味着它不会为每个请求注入新对象。 - 如果解决了以上问题,仍然不是线程安全的,因为
ob引用将指向一个新的原型对象或请求对象,而其他处理的请求将引用新的B对象。最好的方法是获取对主要 Spring MVC 应用程序上下文的引用,然后从方法内部获取 getBean。这样我就可以在本地访问它并获得一个新的实例。但是如何解决线程安全问题。
【问题讨论】:
标签: java spring-mvc scope