使用JavaBeans的地方?

Sid*_*rth 167 java javabeans

什么是JavaBean,为什么需要它?既然我可以使用类和接口结构创建所有应用程序?我为什么需要豆子?你能给我一些例子,其中bean是必不可少的而不是类和接口吗?

请在下面的上下文中解释bean的必要性:

  • Wep应用程序
  • 独立应用程序

Bal*_*usC 171

它们通常只代表真实世界的数据.这是Javabean的一个简单示例:

public class User implements java.io.Serializable {

    // Properties.
    private Long id;
    private String name;
    private Date birthdate;

    // Getters.
    public Long getId() { return id; }
    public String getName() { return name; }
    public Date getBirthdate() { return birthdate; }

    // Setters.
    public void setId(Long id) { this.id = id; }
    public void setName(String name) { this.name = name; }
    public void setBirthdate(Date birthdate) { this.birthdate = birthdate; }

    // Important java.lang.Object overrides.
    public boolean equals(Object other) {
        return (other instanceof User) && (id != null) ? id.equals(((User) other).id) : (other == this);
    }
    public int hashCode() {
        return (id != null) ? (getClass().hashCode() + id.hashCode()) : super.hashCode();
    }
    public String toString() {
        return String.format("User[id=%d,name=%s,birthdate=%d]", id, name, birthdate);
    }
}
Run Code Online (Sandbox Code Playgroud)

实现Serializable本身并不是强制性的,但如果您希望能够在Java内存之外保留或传输Javabeans,例如在硬盘或网络中,则非常有用.

例如,在DAO类中,您可以使用它来创建用户列表,其中您user表的数据存储在数据库中:

List<User> users = new ArrayList<User>();
while (resultSet.next()) {
    User user = new User();
    user.setId(resultSet.getLong("id"));
    user.setName(resultSet.getString("name"));
    user.setBirthdate(resultSet.getDate("birthdate"));
    users.add(user);
}
return users;
Run Code Online (Sandbox Code Playgroud)

例如,您可以使用Servlet类数据从数据库传输到UI:

protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    List<User> users = userDAO.list();
    request.setAttribute("users", users);
    request.getRequestDispatcher("users.jsp").forward(request, response);
}
Run Code Online (Sandbox Code Playgroud)

在例如JSP页面中,您可以通过遵循Javabean约定的EL 访问它以显示数据:

<table>
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Birthdate</th>
    </tr>
    <c:forEach items="${users}" var="user">
        <tr>
            <td>${user.id}</td>
            <td><c:out value="${user.name}" /></td>
            <td><fmt:formatDate value="${user.birthdate}" pattern="yyyy-MM-dd" /></td>
        </tr>
    </c:forEach>
</table>
Run Code Online (Sandbox Code Playgroud)

是否有意义?你知道,这是一种可以在任何地方用来存储,传输访问数据的约定.

也可以看看:

  • 很好的解释,并且通常要感谢**实现Serializable本身并不是强制性的,但是如果您希望能够在Java内存之外保留或传输Javabeans,例如在硬盘或网络中,则非常有用.** (11认同)
  • @SSP:1)没有javadoc.2)"应该"!="必须". (8认同)

Esk*_*sko 60

豆子自己

JavaBeans无处不在,它们是一种惯例,几乎每一个略大的库都使用这些约定来实现自动化.应该使用JavaBeans的几个原因:

  • 他们很好地序列化.
  • 可以使用反射进行实例化.
  • 否则可以非常容易地使用反射来控制.
  • 适用于封装来自业务代码的实际数据.
  • 常见的约定意味着任何人都可以使用您的豆子,并且您可以使用任何类型的文档/手册轻松且一致地使用每个人的豆类.
  • 非常接近POJO,这实际上意味着系统的不同部分之间更加互操作.

当然,Enterprise JavaBeans也是另一回事,不应该与普通的JavaBeans混合使用.我只是想提一下EJB:s因为名字很相似而且很容易让这两个人感到困惑.

Web应用程序中的Bean

如果您在Web应用程序环境中考虑"普通"JavaBeans,那么它们比在您的腿上穿鞋更有意义.由于Servlet规范要求会话可序列化,这意味着您应该将会话中的数据存储为可序列化的 - 为什么不将它作为bean呢?只需将SomeBusinessDataBean引入会话即可,您可以轻松,轻松,符合规范且方便.

此外,在应用程序中传输数据也很容易,因为JavaBeans可以帮助您完全解耦部分应用程序.想想一个非常大的公司内的JavaBeans作为信和应用程序部门各子系统:Dept.A邮件一堆数据Dept.B的,Dept.B不知道- 甚至是关心 -其中数据从刚来因为它应该是,并且可以打开信,从中读取内容并根据该数据执行其操作.

独立应用程序中的Bean

其实什么是上述适用于独立应用程序也一样,唯一的区别是,你可以乱用的UI,因为独立的应用程序多一点的有状态的UI:s,而Web应用程序有statelss UI:■在某些情况下,只有模拟状态的UI:■ .由于存在这种差异,使用独立应用程序变得更容易,但这值得另外一个主题,并且根本不与JavaBeans直接相关.


JRL*_*JRL 50

真的,豆子不算什么.对于一个类是"bean",它需要的是:

  • 拥有一个public,没有参数构造函数
  • 可序列化(直接或通过其中一个超类实现Serializable接口).

为此,如果您希望在某些情况下可以发现字段,则可以为符合特定命名约定的类的属性添加getter和setter(例如,将该类设置为可以从您的可视编辑器中拖放的对象)例如,IDE).

您可以在这里直接找到Sun的更多信息.

  • 这是更短,更简洁的答案.我希望这是第一个答案...... (2认同)

小智 15

Java Bean是一种软件组件,可以在各种不同的环境中重用.Bean的功能没有限制.它可以执行简单的功能,例如检查文档的拼写,或复杂的功能,例如预测股票投资组合的表现.Bean可能对最终用户可见.其中一个例子是图形用户界面上的按钮.Bean也可能对用户不可见.实时解码多媒体信息流的软件是这种类型的构建块的一个例子.最后,Bean可以被设计为在用户的工作站上自主工作或者与一组其他分布式组件协同工作.从一组数据点生成饼图的软件是可以在本地执行的Bean的示例.但是,从库存或商品交易所提供实时价格信息的Bean需要与其他分布式软件合作才能获得其数据.

我们将很快看到软件开发人员必须对类进行哪些具体更改,以便它可用作Java Bean.但是,Java设计者的目标之一是使这项技术易于使用.因此,代码更改是最小的.

Java Bean的优点

软件组件体系结构提供了处理软件构建块的标准机制.以下列表列举了Java技术为组件开发人员提供的一些特定优势:

  • Bean获得了Java"一次编写,随处运行"范例的所有好处.
  • 可以控制公开给应用程序构建器工具的Bean的属性,事件和方法.
  • Bean可以设计为在不同的区域中正确运行,这使其在全球市场中有用.
  • 可以提供辅助软件来帮助人配置Bean.只有在设置该组件的设计时参数时才需要该软件.它不需要包含在运行时环境中.
  • Bean的配置设置可以保存在持久存储中,并在以后恢复.
  • Bean可以注册以从其他对象接收事件,并且可以生成发送到其他对象的事件.

这是Javabean的一个简单示例:

public class MyBean implements java.io.Serializable
{

       protected  int theValue;

       public MyBean()
       {
       }

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

      public int getMyValue()
      {
           return theValue;
      }

}
Run Code Online (Sandbox Code Playgroud)

这是一个名为MyBean的真实Bean,它具有将由JavaBeans持久性机制自动保存和恢复的状态(变量theValue),并且它具有可视可编程环境可用的名为MyValue的属性.这个Bean没有任何可视化表示,但这不是JavaBean组件的要求.