gpt4 book ai didi

java - Spring 的 threadlocal bean 表现得像一个单例

转载 作者:行者123 更新时间:2023-11-30 08:19:55 27 4
gpt4 key购买 nike

我们使用的是 Spring 4.0.6.RELEASE、Java 8,而 Tomcat 是我们的应用程序托管引擎。

我们有一个看起来像这样的 spring bean:

@Service
@Scope("thread")
public class Foo {
private Bar bar;

public void setBar(Bar bar){
this.bar = bar;
}
}

问题是,当这个 bean 被注入(inject)到不同的线程时,所有线程都会得到同一个 bean。每个线程都没有像我预期的那样获得自己的 bean。该 bean 使用 @Autowired 注入(inject)。是否需要执行其他操作才能获取线程本地 bean?

我像这样在 xml 中注册了范围:

<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
<property name="scopes">
<map>
<entry key="thread">
<bean class="org.springframework.context.support.SimpleThreadScope"/>
</entry>
</map>
</property>
</bean>

最佳答案

这里有一个问题,您必须另外提及要在您的 bean 之上创建哪种代理 - 该代理了解范围并将其底层的 bean 管理到相关范围。这应该适合你:

@Service
@Scope(value="thread", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class Foo {

关于java - Spring 的 threadlocal bean 表现得像一个单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26471533/

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