当前位置:  开发笔记 > 编程语言 > 正文

春天的主题

如何解决《春天的主题》经验,为你挑选了1个好方法。

我有一个使用spring和hibernate和struts的Web应用程序(它在Tomcat上运行)

通话顺序是这样的......

Struts动作调用spring服务bean,后者又调用Spring DAO bean.DAO实现是一个Hibernate实现.

问题是 我的所有春豆都会在同一个线程中运行吗?我可以在ThreadLocal中存储一些内容并将其放入另一个bean中吗?

我很确定这在无状态会话Bean中不起作用.EJB容器可以(或将)为每次调用会话bean生成一个新线程

弹簧容器会这样做吗?即在同一个线程中运行所有bean?

当我尝试JUnit测试时 - 我通过测试用例中的Thread.currentThread().getId()和两个bean获得相同的id - 这使我相信只有一个线程在运行

或者这种行为是不可预测的?或者在Tomcat服务器上运行时会改变吗?

澄清 我不希望在两个线程之间交换数据.我想将数据放在ThreadLocal中,并能够从调用堆栈中的所有bean中检索它.仅当所有bean都在同一个线程中时,这才有效



1> A_M..:

Spring不会产生线程.Tomcat呢.Spring只是为您创建和连接对象.

来自浏览器的每个请求都在一个请求中处理.是Tomcat处理请求.Tomcat创建了处理请求的线程.

假设您刚刚在Spring中创建了一个名为"X"的单例bean.然后,所有请求都使用相同的X实例.

Spring bean不存在于一个线程中.它们只是在堆上分配.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有