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