使用Java Bean有什么好处?

时间:2010-08-11 17:37:55

标签: java javabeans

我相信我理解Java Beans是什么:包含no-arg构造函数的Java类是可序列化的,并使用getter和setter公开它们的字段。

  1. Java Bean是否必须公开其所有字段才能获得bean资格?如果不是,是否甚至必须公开任何

  2. Java Java Beans是否包含带参数的构造函数以及no-arg构造函数?

  3. Java Bean的目的是什么,除了符合某种编码风格?似乎有很多关于'豆豆'或'豆豆'的讨论,但我不知道为什么它们是有利的,特别是。

  4. 我完全可以制作no-arg构造函数。可能有很多原因,如果无参数构造函数帮助编译器进行一些优化,我也不会感到惊讶。我也可以理解让你的课程可序列化。即使该类从未被序列化,它可以,并且回溯可能会令人讨厌(或者在黑盒子库中不可能)。

    但最令人好奇的是要求所有字段都可以通过getter和setter访问。当我需要它时,我确实在我自己的工作中使用它们,但Java Beans需要它们(可能所有这些,取决于我对#1的回答)似乎很奇怪。如果它是反射的问题,那么反射是否也不容易得到字段?如果这不仅仅是设置值的问题,那么如果方法存在,反射是否会在字段上使用getter / setter?

6 个答案:

答案 0 :(得分:13)

JavaBean本身并不十分有趣,它只是一个符合上面列出的标准的Java类。但是,符合此标准是Java EE框架构建的支柱之一,它出现在很多地方。我怀疑当你听说JavaBeans可以做的所有伟大事情时,Enterprise JavaBeans(EJB)中提到了什么。仅供参考,下面列出了几种不同类型的EJB:

  1. 实体豆
  2. 有状态会话豆
  3. 无国籍会话豆
  4. 现在有些细节......

    实体豆

    您可能希望从底层数据库读取/写入对象。您可以使用JDBC / SQL来执行此操作,但您也可以使用持久性框架。 Java EE规范包含一个持久性规范,您可以将该类声明为“实体bean”,并让Java自动生成数据库表和逻辑,以便在数据库中的条目和程序中的对象之间进行映射。最初,持久性需要使用Application Server(例如Glassfish,JBoss,Geronimo等),但AFAIK,您可以在没有服务器组件的桌面应用程序中使用它。实际的实现由Eclipselink,Toplink,Hibernate等低级库提供,但Java API抽象出它们之间的任何差异。

    有状态会话Bean

    想象一下,您想要创建一个存在于单独JVM上的Java类实例。 JVM可能在同一台物理计算机上运行,​​但同样可能在通过网络进行通信的不同计算机上运行。使用Java EE应用程序服务器,您可以创建一个可以由应用程序服务器的客户端实例化的类。这些客户端可以实例化一个类似于普通对象的类,但是在对象上调用的任何方法都会在服务器上执行,并将结果传递回调用者。它基本上是一种面向对象的远程过程调用形式。

    无国籍会话豆

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

答案 1 :(得分:5)

他们遵守明确的规范

多亏了这一点,有很多工具可以轻松地使用Javabeans(或者反之亦然)。有些工具可以根据某种风格(XMLJSONCSVDDL等)和/或反之亦然的某些数据自动生成它们阅读/操纵/映射它们,如Commons BeanUtilsDozerEZMorph等。此外,有许多MVC / ORM框架可以与Javabeans一起使用,例如JPAHibernateJSFSpring等。甚至像Eclipse这样有点体面的IDE也知道如何基于某些字段自动生成Javabeans。

这是Javabeans的工具和框架,使我们的生活更轻松。正是Javabeans规范使这些事情成为现实。

答案 2 :(得分:2)

最重要的是,Java Bean是可重用的软件组件

这意味着它没有与其他组件紧密耦合。如果您的Java类创建另一个类的实例,或者返回一些特定的实现类,则它不再是bean。 Bean覆盖了一些明确定义的功能,并与其他类松散耦合。

这样做的好处是,你可以获得所有这些小件,然后你可以很容易地一起工作。此外,这些都易于重复使用和单元测试。

即使您没有使用某些可视化环境来耦合bean(如bean规范所示),这仍然是使用bean的原因:获取易于使用的小块代码。

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

答案 3 :(得分:2)

1)Beans独立于平台,这意味着它可以在任何地方运行。

2)它可以在任何语言环境中运行,并且本质上是分布式的。

3)可以控制豆类的方法,性质和事件。

4)配置Java bean很容易。

5)bean可以接收和创建事件。

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

答案 4 :(得分:0)

最大的优点是您的bean是根据规范构建的,可以直接与“bean兼容”的库和框架一起使用。

例如,大多数序列化框架(XML,JSON,YAML,...)通常可以直接使用bean而无需配置。

答案 5 :(得分:0)

我猜想bean的最大优点是可以以单个对象的形式(或多或少)传递数据。不需要在方法的定义中设置很多参数,而是可以使用bean代替并直接以对象形式传递数据。它提供了更好的程序架构...这就是我的想法