JavaBean和EJB的区别

41

一个相对新手的Java提出了一个简单的问题:

JavaBean和EJB之间有什么区别?

5个回答

32

Java Bean只是一组约定。EJB是J2EE业务组件的标准。

具体来说,Java Bean:

  • 有一个公共默认构造函数;
  • 可读属性方法以“get”开头;
  • 可写属性方法以“set”开头;并且
  • 是可序列化的。

例如,一个具有"margin"属性的Java Bean至少应该如下所示:

public class MyBean implements Serializable {
  private int margin;

  public MyBean() { }
  public int getMargin() { return margin; }
  public void setMargin(int margin) { this.margin = margin; }
}

EJB,尽管名字相似,但与此几乎没有关系。


JavaBeans还有更多的内容(例如,您可以拥有BeanInfo类),但那是JavaBeans广泛使用的部分。 - Joachim Sauer
14
您能否除了说明EJB是什么以外,进一步解释它的特点?同时请勿更改原意,使内容更加易懂,但不要添加解释。以下是需要翻译的内容:Can you explain what an EJB is in addition to what it is not? - allyourcode
3
你可以改进EJB部分。 - shareef
1
EJB 完全没有关系? - Koray Tugay

11

请看这篇文章 - JavaBeans 与 Enterprise JavaBeans

概要:

JB

JavaBeans采用低级方法开发可重用的软件组件,可以用于构建各种类型的Java应用程序(小应用程序、独立应用程序等)在任何领域。

EJB

Enterprise JavaBeans采用高级方法构建分布式系统。它使应用程序开发人员集中精力编写业务逻辑,同时无需编写所有企业应用程序所需的“管道”代码。


这个答案提供了有用的信息,但不完整。 - Raphaël Colantonio

7
  1. JavaBeans 可以在运行时是可见或不可见的。例如,可视化GUI组件可以是按钮、列表 框、图形或图表。

    EJB 是一个非可视的远程对象。

  2. JavaBeans 旨在针对单个进程而本地化,并主要用于客户端。虽然可以开发服务器端 JavaBeans,但使用 EJB 规范进行开发要容易得多。

    EJB 是可远程执行的组件或业务对象,只能部署在服务器上。

  3. JavaBeans 是用于创建通用 Java 组件并将其组合到小应用程序和大型应用程序中的组件技术。

    尽管 EJB 是一种组件技术,但它既不建立也不扩展原始 JavaBean 规范。

  4. JavaBeans 具有称为属性界面的外部接口,该接口允许构建工具解释 bean 的功能。

    EJB 具有部署描述符,该描述符将其功能描述给外部构建工具或 IDE。

  5. JavaBeans 可能具有 BeanInfo 类、属性编辑器或自定义器。

    EJB 没有 BeanInfo 类、属性编辑器或自定义器的概念,除了部署描述符中描述的信息外,不提供其他信息。

  6. JavaBeans 没有类型。

    EJB 有两种类型 - 会话 Bean 和实体 Bean。

  7. JavaBeans 中不存在事务的明确支持。

    EJB 可以是事务性的,EJB 服务器提供事务性支持。

  8. JavaBeans 有组件桥接。例如,JavaBean 还可以部署为 Activex 控件。

    EJB 不能部署为 ActiveX 控件,因为 ActiveX 控件意味着在桌面上运行,而 EJB 是服务器端组件。但是,通过 EJB-to-CORBA 映射定义了 EJB 对 CORBA-IIOP 兼容性的支持。


你是指会话Bean和实体Bean是什么意思? - Koray Tugay


5

我发现接受的答案有点难以理解,所以我在谷歌上搜索了几个链接并得到了以下答案。

企业JavaBean (EJB) 3.1是J2EE规范,它指示服务器(应用服务器)将一段代码部署在EJB容器中。

EJB技术是用于开发和部署基于组件的业务应用程序的服务器端组件架构。 EJB技术基于Java EE 6技术,可以快速简化地开发分布式、事务性、安全和可移植的应用程序。

简而言之: 如果您创建了一个EJB并在服务器上部署它,它可以被远程调用(使用某些技术,如使用RMI进行JNDI查找)或本地调用(即在应用程序内部)。

另一方面,Java beans 是一个简单的普通 Java 类,具有 getter 和 setter 方法,并且该类被序列化,以下是示例:
public class MyBean implements java.io.Serializable
{
   protected  int theValue;

   public MyBean()
   {
   }

   public void setMyValue(int newValue)
   {
      theValue = newValue;
   }

   public int getMyValue()
   {
      return theValue;
   }
}

所以,这意味着EJB和Java Beans之间没有比较,它们是完全不同的概念。

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