Java 每次在servlet上完成请求时,EJB都会被注入servlet吗?

Java 每次在servlet上完成请求时,EJB都会被注入servlet吗?,java,servlets,ejb,Java,Servlets,Ejb,我试图复制MVC设计模式。这就是我要做的,我有一个servlet来处理所有的请求。其中包括注入的EJB。所以在这个控制器/servlet中声明了7到15个带有@EJB注释的EJB 我只想问一下,例如,是否有一个用户调用maincontroller/servlet。EJB是否仅在该调用时被注入,还是每次用户调用servlet时都被注入?或者在第一次创建servlet时注入EJB?在创建对象时注入资源(因为您不能注入静态字段,而只能注入成员变量) 对于servlet,servlet类由servlet

我试图复制MVC设计模式。这就是我要做的,我有一个servlet来处理所有的请求。其中包括注入的EJB。所以在这个控制器/servlet中声明了7到15个带有@EJB注释的EJB


我只想问一下,例如,是否有一个用户调用maincontroller/servlet。EJB是否仅在该调用时被注入,还是每次用户调用servlet时都被注入?或者在第一次创建servlet时注入EJB?

在创建对象时注入资源(因为您不能注入静态字段,而只能注入成员变量)


对于servlet,servlet类由servlet容器加载,然后创建实例。此时,将注入
@EJB或@Resource
。容器然后调用init()方法

注入是在创建对象时完成的,因为Servlet容器通常(但不是强制性的,在单线程模型的情况下)创建Servlet的单个实例,然后在单独的线程中提供请求,如果您不使用SingleThreadModel,您的EJB应该创建一次。

感谢您的澄清,只是为了确保在创建servlet(以及它的EJB)之后,如果有10个用户访问servlet,在这个过程中,ejb的创建或注入将不再发生,因为它在创建ejb的第一个位置就已经完成了,除非它们是有状态会话bean。在这种情况下,您将拥有与会话数相同的会话数。这是不正确的。SingleThreadModel只意味着servlet一次只能服务一个线程。servlet容器总是只创建一次servlet实例(singlethreadmodel与否)。@Kal检查servlet规范-SRV.2.2.1,它说--“SingleThreadModel接口的使用保证了在给定servlet实例的服务方法中一次只能执行一个线程。需要注意的是,这一保证只适用于每个servlet实例,因为容器可能会选择将这些对象池化”,这本质上意味着可以有多个实例,这要感谢edit@DataNucleus