使用Java Beans的优势是什么?

26

我认为我理解什么是Java Bean:Java类(或多个类),其中包含无参数构造函数,可序列化,并使用getter和setter公开其字段。

  1. Java Bean必须公开所有字段才能符合Bean的资格吗?如果不是,它甚至需要公开任何一个吗?

  2. Java Bean可以包括有参数的构造函数和无参数构造函数吗?

  3. Java Bean的目的是什么,除了符合特定的编码风格?似乎有很多关于“beans this”或“beans that”的讨论,但我不知道它们具体有什么优势。

我完全可以理解制作无参数构造函数。可能有很多原因,而且如果无参数构造函数帮助编译器进行一些优化,我也不会感到惊讶。我也可以理解使您的类可序列化。即使永远不会序列化该类,也可能会这样做,回头进行修改可能会很麻烦(或在黑盒库中不可能)。

但最好奇的是要求所有字段都可以通过getter和setter访问。当我需要时,我确实在自己的工作中使用它们,但是Java Bean需要它们似乎有些奇怪(根据我的答案可能需要所有字段)。如果涉及反射问题,那么反射难道不能像这样轻松地获取字段吗?如果不仅仅是设置值而需要其他操作,那么如果方法存在,则反射难道不能使用getter / setter代替字段吗?


很久以前有一个豆编辑器,因此这个页面可能有助于理解豆的用途:http://java.sun.com/developer/onlineTraining/Beans/Beans1/builder-tools.html - James Black
6个回答

14
JavaBean本身并不是非常有趣,它只是一个符合你上面列出的一些标准的Java类。然而,符合这个标准是构建Java EE框架的支柱之一,并在很多地方应用。我怀疑当你听到所有JavaBean可以做的伟大事情时,所指的是企业JavaBean(EJB)。以下是几种不同类型的EJB:
  1. 实体bean
  2. 有状态会话bean
  3. 无状态会话bean
下面是一些详细信息... 实体bean 您可能希望将对象读取/写入底层数据库。您可以使用JDBC / SQL来实现此目的,但也可以使用持久性框架。Java EE规范包括一种持久性规范,其中您声明您的类为“实体bean”,并让Java自动生成数据库表和逻辑,以映射数据库中的条目和程序中的对象之间的关系。最初,持久性需要使用应用程序服务器(例如Glassfish,JBoss,Geronimo等),但据我所知,您可以在没有服务器组件的桌面应用程序中使用它。实际的实现由较低级别的库(如Eclipselink,Toplink,Hibernate等)提供,但Java API将其差异抽象掉了。 有状态会话bean 想象一下,您想创建一个存在于单独JVM上的Java类的实例。JVM可以在同一物理机器上运行,但也可能在通过网络通信的不同机器上运行。使用Java EE应用程序服务器,您可以创建一个可以由应用程序服务器的客户端实例化的类。这些客户端可以实例化一个类,该类将像普通对象一样运行,但是对对象调用的任何方法都在服务器上执行,并将结果传递回调用者。它基本上是远程过程调用的面向对象形式。 无状态会话bean

这是状态会话Bean的一个小变种。使用有状态的Bean时,如果服务器有1000个客户端,则可能需要创建1000个Bean实例并记住哪个实例属于哪个客户端。使用无状态的Bean时,服务器创建一组Bean池,并不必记住哪个客户端拥有哪个Bean。当客户端调用方法时,服务器从池中选择一个Bean并使用它,在完成后将其返回到池中。您可以在希望服务器记忆有关每个客户端的详细信息时使用有状态会话Bean,而当您不需要记住特定于客户端的详细信息时,则使用无状态会话Bean。请注意,无状态Bean可能具有状态,只是此状态对客户端不感兴趣。


5

他们遵循明确的规范。

由于这一点,有许多工具可以帮助您轻松处理Javabeans(或者反之亦然)。有一些工具可以根据某些特定格式的数据(如XMLJSONCSVDDL等)自动生成它们,也可以反过来操作,以及像Commons BeanUtilsDozerEZMorph等读取/操作/映射它们。此外,还有许多与Javabeans一起使用的MVC/ORM框架,例如JPAHibernateJSFSpring等。即使是像Eclipse这样的稍微好一点的IDE也知道如何根据一些字段自动生成Javabeans。

正是围绕Javabeans的工具和框架使我们的生活更加轻松。正是Javabeans规范使得这些东西存在。


2

1) Beans是平台无关的,这意味着它可以在任何地方运行。

2) 它可以在任何语言环境下运行,并且具有分布式特性。

3) Beans的方法、属性和事件可以被控制。

4) 配置Java beans非常容易。

5) 一个bean既可以接收事件,也可以创建事件。

6) Bean的配置设置可以持久存储,并且可以随时检索。


2

JavaBean最重要的特点是作为可重用软件组件。

这意味着它不会与其他组件紧密耦合。如果你的Java类创建了另一个类的实例或返回某个特定的实现类,那么它就不再是JavaBean。JavaBean涵盖了一些明确定义的功能片段,并与其他类松散耦合。

这样做的好处是可以获得许多小的代码片段,容易组合在一起工作。此外,这些代码片段易于重复使用和进行单元测试。

即使您没有使用一些视觉化工具来耦合JavaBeans(如bean规范建议的那样),这仍然是使用JavaBeans的原因之一:获取易于使用的小代码块。

如果您不使用可视化工具,那么您的JavaBean是否具有0参数构造函数或是否可序列化并不那么重要。


如果你的Java类创建了另一个类的实例,或者返回某个特定的实现类,那么它就不再是一个bean了。-- 你能解释一下吗?毕竟,一个bean可以创建/返回一个String,例如。 - Brian S

0

我认为Bean的最大优点是可以通过单个对象的形式传递数据。在方法的定义中不需要使用大量的参数,而是可以使用Bean代替,并直接以对象的形式传递数据。这提供了更好的程序架构...这就是我的想法。


0
最大的优点是您的bean是根据规范构建的,可以直接与“bean兼容”的库和框架一起使用。
例如,大多数序列化框架(XML、JSON、YAML等)通常可以直接使用bean而无需配置。

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