我需要一些澄清。我知道如何使用JSF及其相应的会话bean,但我对EJB感到困惑。使用EJB引入的bean和与JSF一起使用的会话bean之间有什么区别(对于ejb,我知道有无状态/完整会话bean和实体bean、实体管理器等)。我不明白的是何时使用EJB和何时使用jsf bean。除了实体bean外,ejb有状态/无状态会话bean似乎与jsf会话bean类似。我已经阅读了有关将ejb注入到jsf中的文章,但为什么不只是将ejb与jsf bean结合使用呢?希望您能理解我的困惑。谢谢。
我需要一些澄清。我知道如何使用JSF及其相应的会话bean,但我对EJB感到困惑。使用EJB引入的bean和与JSF一起使用的会话bean之间有什么区别(对于ejb,我知道有无状态/完整会话bean和实体bean、实体管理器等)。我不明白的是何时使用EJB和何时使用jsf bean。除了实体bean外,ejb有状态/无状态会话bean似乎与jsf会话bean类似。我已经阅读了有关将ejb注入到jsf中的文章,但为什么不只是将ejb与jsf bean结合使用呢?希望您能理解我的困惑。谢谢。
首先,我们需要了解JSF和EJB bean之间的区别。
JSF beans是用于读取JSF组件值的POJO类
。JSF中有两种类型的bean:
Managed bean关注Java bean如何创建和初始化。正如您所知,JSF使用延迟初始化模型。这意味着特定范围内的bean不是在范围启动时创建和初始化,而是在按需即第一次需要bean时创建和初始化。
Backing bean关注特定托管bean所扮演的角色。这是一个作为页面上组件的服务器端表示的角色。通常,后备bean具有请求范围,但这不是限制。
EJB Bean是封装应用程序业务逻辑的服务器端组件。业务逻辑是实现应用程序目的的代码。
Java EE中有不同类型的托管bean,在其中确实存在一些混淆。更让人困惑的是,Java EE 6引入了第三种类型的托管bean:CDI bean。
在本回答中,我试图解释一下它们之间的区别和相似之处:How do CDI and EJB compare? interact?
简而言之,JSF托管bean主要不支持事务处理,在处理业务逻辑以及尤其是JPA时通常需要此功能。
另请注意,会话作用域托管bean中「会话」一词与无状态和有状态会话bean中所指的会话完全不同。