java - Spring MVC 请求和原型(prototype)范围不起作用

标签 java spring-mvc scope

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

我有一个 Controller A。另一个使用范围 Request 定义的 bean B

@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,我会得到相同的输出,这意味着它不会为每个请求注入(inject)新对象。
  3. 上面的 ifsolved 仍然不是线程安全的,因为 ob 引用将指向新的原型(prototype)对象或请求对象,而处理的其他请求将引用新的 B 对象。最好是获取对主 Spring MVC 应用程序上下文的引用,然后从方法内部获取 Bean。这样我就可以在本地访问它并获得一个新的实例。但如何解决线程安全问题。

最佳答案

@Controller 位于 Singleton 范围内。使用代理 Bean。

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

关于java - Spring MVC 请求和原型(prototype)范围不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14517115/

相关文章:

c++ - 从成员函数中访问私有(private)数据成员

c - while 循环内的变量作用域

java - Scanner 类的问题

java - Thymeleaf 自定义方言不起作用

java - 迁移到 Spring Boot 2 后忽略自定义 ObjectMapper

java - Autowiring 和 Spring 注入(inject)的问题

java - Spring 依赖注入(inject)到带有构造函数的类

Java正则表达式 "\A"边界匹配

java - Android @NonNull 和 Jetbrains @NonNull 有什么区别

javascript - 如何让 io.sockets.on 调用外部/全局函数?