Java 中的无状态 bean 不会在客户端的两次调用之间保留其状态。简而言之,我们可以将它们视为具有业务方法的对象。每个方法都接受参数并返回结果。调用该方法时,会在执行堆栈中创建一些局部变量。当该方法返回时,局部变量将从堆栈中删除,并且如果分配了一些临时对象,则无论如何它们都会被垃圾收集。
从我的角度来看,这与通过单独的线程调用同一单个实例的方法没有什么不同。那么为什么容器不能使用一个 bean 实例而不是池化多个 bean 实例呢?
池化可以做几件事。
第一,通过每个实例有一个 bean,可以保证线程安全(例如,Servlet 就不是线程安全的)。
第二,您可以减少 Bean 可能具有的任何潜在启动时间。虽然会话 Bean 是“无状态的”,但它们只需要对于客户端来说是无状态的。例如,在 EJB 中,您可以将多个服务器资源注入到会话 Bean 中。该状态对于 bean 来说是私有的,但是您没有理由不能在调用之间保持它。因此,通过池化 Bean,您可以减少这些查找,使其仅在创建 Bean 时发生。
第三,您可以使用 Bean 池作为限制流量的手段。如果池中只有 10 个 Bean,则最多只能同时处理 10 个请求,其余的将排队。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)