gpt4 book ai didi

multithreading - 为什么spring不提供线程范围实现?

转载 作者:行者123 更新时间:2023-12-03 12:43:40 26 4
gpt4 key购买 nike

为什么 Spring 不提供线程范围实现?
有没有人在 Web 应用程序上下文中使用带有 Spring 的线程范围 bean?
应该有一个标准的、清晰的描述如何做到这一点!
(SpringByExample 有一个解决方案——我没有测试它——但它还不是主流。)

最佳答案

Spring 确实提供了线程作用域,但默认情况下没有注册。

现有的 bean 范围在文档中定义,here .

singleton

  • (Default) Scopes a single bean definition to a single object instance per Spring IoC container.

prototype

  • Scopes a single bean definition to any number of object instances.

request

  • Scopes a single bean definition to the lifecycle of a single HTTP request; that is, each HTTP request has its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring ApplicationContext.

session

  • Scopes a single bean definition to the lifecycle of an HTTP Session. Only valid in the context of a web-aware Spring ApplicationContext. global

application

  • Scopes a single bean definition to the lifecycle of a ServletContext. Only valid in the context of a web-aware Spring ApplicationContext.

websocket

  • Scopes a single bean definition to the lifecycle of a WebSocket. Only valid in the context of a web-aware Spring ApplicationContext.


然后文档会记下

As of Spring 3.0, a thread scope is available, but is not registered by default. For more information, see the documentation for SimpleThreadScope.



请注意,与原型(prototype)范围类似,线程范围

[SimpleThreadScope] does not clean up any objects associated with it.



此线程范围实现使用 ThreadLocal储存 bean 。
您无法检测到 Thread在 Java 中结束/死亡,因此 Spring IOC 容器无法明确知道何时从 ThreadLocal 中删除 bean并调用任何生命周期结束的方法。然后,这个责任就落在了开发者身上。

在使用此范围时要小心。例如,在线程池上下文中,bean 可能已经创建并存储在池的重用线程之一中。根据您的用例,这可能是不正确的行为。

关于multithreading - 为什么spring不提供线程范围实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21552362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com