Java Bean和Enterprise Java Beans之间的区别是什么?

44

它们是不同的,还是可以互换使用?如果它们是不同的,那么是什么使它们不同于彼此?


1
重复:https://dev59.com/RnM_5IYBdhLWcg3wfTE0 - Zaki
另请参见:https://dev59.com/0nM_5IYBdhLWcg3w8H82 - Zaki
4个回答

52

JavaBean是一个普通的Java对象,符合一定的约定,包括使用访问器函数(getFoo/setFoo)进行成员访问,提供默认构造函数以及其他一些类似的要求。

企业级JavaBean是Java EE应用服务器中的组件,有若干种变体,具体取决于您所使用的Java EE版本(更具体地说,涉及哪个特定的EJB规范集)。

最初,JavaBeans主要是用于构建工具中,通过提供已知接口来进行内省查找。然而,它们很快就演变成了一种近乎于“宗教”的东西。

企业级JavaBeans旨在为企业应用程序提供封装的业务逻辑,这些逻辑位于通用容器中,并提供会话管理、安全性、资源池等服务,从而使业务逻辑相对独立于这些跨越式关注点。(他们是否实现了这一点是有争议的,因为一开始他们难以使用。然而,规范的更新使得使用更加容易了。遗留应用程序仍然很麻烦,不幸的是,这可能是您遇到的大多数EJBs。)


编辑后添加:


2
我正要完成一个几乎相同的答案,但你比我更快,所以我决定点赞。干得好。 - Fredrik
@ttmrichter:好的,你把所有东西都覆盖了,并且还多了一些,所以我的看法其实不值得发布。我认为唯一缺失的是对MDB、CMP和会话Bean的混淆尝试描述,但我并不满意这种尝试,所以也无妨。 - Fredrik
1
+1 对于JavaBean的解释,-1 对于EJB的解释。请少使用流行语! - allyourcode
1
首先,JavaBeans不仅仅是一种命名约定。请查看我提供的链接。只是这个命名约定是最为常见的部分。其次,“组件模型”也是一个流行语。它并没有解释该模型旨在实现什么(您在问题中涵盖了网络代码,但未涉及会话管理、持久性、安全性等等)。实际上,“什么是企业级JavaBean”并没有简单的答案(除了“一个可怕的名称”)。试图回答这个问题只会产生术语和流行语。 - JUST MY correct OPINION
1
+1 你说服了我 :) (虽然我仍然会争论组件模型提供的确切内容并不是最重要的,如果你想理解 EJB 背后的大局。你只需要知道它是一个组件模型,就像 CORBA、COM 或其他一样。但是,是的,你需要了解通常情况下并不是所有人都知道的组件模型的概念。) - ewernli
显示剩余3条评论

17

Java Bean 是指包含私有属性(数据)以及 getter 和 setter 方法的类的实例。

例如,在你的类中有:private String myString;,那么你应该在代码中定义 public String getMyString();public void setMyString(String settingString); 这两个方法。虽然我发现不一定需要全部定义,但如果出现问题,请不要感到惊讶!

EJB (Enterprise Java Bean)则更加复杂,它们只驻留在处理 EJB 的应用程序服务器中(Tomcat 不支持 EJB)。EJB 有三种类型:

  1. Session:通常包含一些业务逻辑。
  2. Entity:通常与数据存储(如数据库)进行交互。
  3. Message-Driven:接收来自 JMS 的消息。

请注意,现在有TomEE,Tomcat服务器支持EJB(以及完整的Web Profile):http://tomee.apache.org/tomcat-ejb.html。 - Hawkeye Parker

7

Java beans 指的是只包含字段和它们的 getter-setter 方法的类。尽可能少或者根本没有业务逻辑。它们也被称为 POJO (Plain Old Java Object)。

EJB 是 J2EE 规范的一部分,可以用于利用符合 J2EE 标准的服务器的全部功能,例如事务、会话管理、安全性等(这并不意味着您不能在不使用 EJB 的情况下使用这些功能)。


1
那么EJB就像是一个扩展的Java Bean?带有一些额外的功能? - Koray Tugay

4
"Java Beans" 用于从数据库中检索数据并作为容器在 MVC 模型中在 Servlet 和 JSP 之间传递数据。使用具有 setter 和 getter 的类(容器)来存储和获取数据。
"企业级 Java Beans" 与 "Java Beans" 类似,但具有更多功能,例如会话管理、安全性、事务等,并借助不同类型的 EJB(会话 Bean、实体 Bean 和消息驱动 Bean)来实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接