【问题标题】:What's the point of beans?豆子有什么用?
【发布时间】:2011-05-15 14:58:03
【问题描述】:

我做过一些 JSP 教程,但我不明白 bean 类的意义何在。它只是获取和设置方法。我们为什么要使用它们?

public class UserData {

String username;
String email;
int age;

public void setUsername( String value )
{
    username = value;
}

public void setEmail( String value )
{
    email = value;
}

public void setAge( int value )
{
    age = value;
}

public String getUsername() { return username; }

public String getEmail() { return email; }

public int getAge() { return age; }

}

而jsp是

<jsp:useBean id="user" class="user.UserData" scope="session"/> 
<HTML>
<BODY>
You entered<BR>
Name: <%= user.getUsername() %><BR>
Email: <%= user.getEmail() %><BR>
Age: <%= user.getAge() %><BR>
</BODY>
</HTML>

【问题讨论】:

  • 相关:stackoverflow.com/questions/1727603/…。如果没有 Javabeans,你最终会得到 Object[]Object[][]Map&lt;String, Object&gt; 等,它们远非可重用和自文档化,甚至什么都没有(高度紧耦合的代码逻辑)。

标签: java jsp jakarta-ee javabeans


【解决方案1】:
  1. 一个 Bean 获得了 Java 的“一次编写,随处运行”范式的所有好处。 暴露给应用程序的 Bean 的属性、事件和方法 可以控制生成器工具。

  2. 一个 Bean 可能被设计为在不同的语言环境中正确运行,这使得它 对全球市场有用。

  3. 可以提供辅助软件来帮助人们配置 Bean。这个软件是 仅在设置该组件的设计时参数时才需要。它 不需要包含在运行时环境中。 可以将 Bean 的配置设置保存在持久存储中并恢复 晚些时候。

  4. 一个 Bean 可以注册以接收来自其他对象的事件,并且可以生成事件 被发送到其他对象。

scriptlets(那些&lt;% %&gt;的东西)的使用确实是非常不鼓励的,因为标签库(如JSTL)和EL(Expression Language,那些${}的东西)的诞生十年前。 scriptlet 的主要缺点是:

  1. 可重用性:您不能重用脚本。

  2. 可替换性:您不能将 scriptlet 抽象化。

  3. OO 能力:不能使用继承/组合。

  4. 可调试性:如果 scriptlet 中途抛出异常,你得到的只是一个空白页。

  5. 可测试性:scriptlet 不可进行单元测试。

  6. 可维护性:每个 Saldo 都需要更多时间来维护混合/杂乱/重复的代码逻辑。

【讨论】:

    【解决方案2】:

    JavaBeans 的主要原因是可重用性。 JavaBean 可用于 JSP、Servlet 和其他 Java 技术。

    它是一个简单的可序列化对象,用于将许多对象封装成一个。即,我们可以发送一个完全定义为通过网络单独发送每个属性的 bean。

    【讨论】:

      【解决方案3】:

      accessor(getter) 和 mutator(setter) 方法通常用于提供封装。由于实例变量是私有的,它们只能通过这些方法在类外部访问。

      因此,外行:能够在不破坏使用您代码的其他人的代码的情况下更改您的实现代码是封装的主要好处

      【讨论】:

        【解决方案4】:

        我正在阅读 JavaFX Properties and Binding 那里我得到了 JavaBeans 的实际含义,这里是段落。

        Java 编程语言使封装数据成为可能 在一个对象内,但它不强制任何特定的命名 您定义的方法的约定。例如,您的代码 可以定义一个 Person 类,它封装了一个名字和一个 姓。但是如果没有命名约定,不同的程序员可能 为这些方法选择不同的名称:read_first()、firstName()、 getFN() 等都是完全有效的选择。然而,有 不保证这些名称对其他开发者有意义。

        JavaBeans 组件架构通过以下方式解决了这个问题 定义一些简单的命名约定,带来一致性 项目。在 JavaBeans 编程中,这些的完整签名 方法是:public void setFirstName(String name), public String getFirstName()、public void setLastName(String name) 和 public 字符串 getLastName()。这种命名模式很容易识别, 对于人类程序员和编辑工具,例如 NetBeans IDE。 在 JavaBeans 术语中,Person 对象被称为包含 firstName 和 lastName 属性。

        JavaBeans 模型还提供对复杂属性类型的支持, 加上一个事件传递系统。它还包含许多支持 类,都可以作为 java.beans 包下的 API 使用。 因此,掌握 JavaBeans 编程需要学习 所需的命名约定及其相应的 API。 (更多 JavaBeans 的一般背景阅读,请参阅 JavaBeans 课程 Java 教程)。

        【讨论】:

          【解决方案5】:

          您可以在没有 bean 的情况下使用 JSP,但是结果将是处理逻辑的代码和处理站点美学的代码都会混乱。这并不理想,尤其是因为在大多数情况下,一组人编写逻辑代码,另一组人负责美学,因此 bean 允许一定程度的分离,这使得构建网站的人的生活更轻松。

          Beans 还允许您重用代码,这是您应该使用它们的另一个原因。

          【讨论】:

            【解决方案6】:

            主要用于REUSABILTY。它是一个简单的可序列化对象,用于将许多对象封装成一个。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-12-30
              • 1970-01-01
              • 1970-01-01
              • 2017-02-28
              • 2021-03-04
              • 2011-12-28
              • 1970-01-01
              • 2013-07-22
              相关资源
              最近更新 更多