我有一个使用 spring、hibernate 和 struts 的 Web 应用程序(它在 Tomcat 上运行)
调用顺序是这样的......
Struts 动作调用 spring 服务 bean,后者又调用 Spring DAO bean。DAO 实现是一个 Hibernate 实现。
问题是 我所有的 spring bean 会在同一个线程中运行吗?我可以在 ThreadLocal 中存储一些东西并在另一个 bean 中获取它吗?
我很确定这在无状态会话 Bean 中不起作用。EJB 容器可以(或将)为会话 bean 的每次调用生成一个新线程
弹簧容器会做同样的事情吗?即在同一个线程中运行所有bean?
当我尝试 JUnit 测试时——我通过测试用例中的 Thread.currentThread().getId() 和两个 bean 获得了相同的 id——这让我相信只有一个线程在运行
还是行为不可预测?或者在Tomcat服务器上运行时会改变吗?
澄清 我不希望在两个线程之间交换数据。我想将数据放入 ThreadLocal 并能够从调用堆栈中的所有 bean 中检索它。这只有在所有 bean 都在同一个线程中时才有效