首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JavaBeans的地方?

使用JavaBeans的地方?
EN

Stack Overflow用户
提问于 2009-11-13 07:00:13
回答 4查看 81.1K关注 0票数 198

什么是JavaBean,为什么我需要它?既然我可以用类和接口结构创建所有的应用程序?为什么我需要豆子?你能给我举几个例子,说明bean是必需的,而不是类和接口吗?

在下面的上下文中,请解释豆的重要性:

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

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-13 13:36:09

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

代码语言:javascript
复制
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);
    }
}

实现Serializable本身并不是强制性的,但是如果您希望能够在Java内存之外(例如在硬盘或网络中)持久化或传输Javabeans,那么实现Java是非常有用的。

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

代码语言:javascript
复制
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;

例如,在Servlet类中,可以使用它将数据从数据库传输到UI:

代码语言:javascript
复制
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    List<User> users = userDAO.list();
    request.setAttribute("users", users);
    request.getRequestDispatcher("users.jsp").forward(request, response);
}

例如,在一个JSP页面中,您可以通过访问 it by EL (遵循Javabean约定)来显示数据:

代码语言:javascript
复制
<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>

说得通吗?您知道,它是一种约定,您可以在任何地方使用它来存储、传输和访问数据。

另请参阅:

  • JavaBeans规范
票数 196
EN

Stack Overflow用户

发布于 2009-11-13 07:14:37

豆类本身

JavaBeans无处不在,它们是一种惯例,几乎每一个稍微大一点的库都会使用这些约定来实现自动化。以下是使用JavaBeans的几个原因:

  • 它们连载得很好。
  • 可以使用反射实例化。
  • 否则可以很容易地使用反射来控制。
  • 很好地封装来自业务代码的实际数据。
  • 通用约定意味着任何人都可以使用您的mean,您也可以使用其他人的mean,而无需任何文档/手册,可以轻松和一致地使用。
  • 非常接近波霍,这实际上意味着系统不同部分之间更多的互操作性。

当然,还有企业JavaBeans,这是一个完全不同的问题,不应该与普通的JavaBeans混为一谈。我只想提到EJB:s,因为它们的名称是相似的,很容易混淆它们。

web应用程序中的Beans

如果你考虑网络应用程序中的“正常”JavaBeans,它们比在腿上穿鞋更有意义。因为Servlet规范要求会话是可序列化的,这意味着您应该将您的数据存储在会话中,作为可序列化的东西--那么为什么不让它成为一个bean呢?只要把你的SomeBusinessDataBean投入到会话中,你就可以开始了,非常简单,符合规范,而且很方便。

而且,在应用程序中传输数据也很容易,因为JavaBeans可以帮助您完全解耦应用程序的各个部分。把JavaBeans看作是一封信,把应用程序的各个子系统看作是一个大公司中的部门: Dept.A将一堆数据发送给Dept.B,Dept.B甚至不知道-or是从哪里来的--数据是从哪里来的--并且可以打开信件,读取数据,并根据这些数据来做它的事情。

单独应用程序中的Beans

实际上,上面的内容也适用于独立应用程序,唯一的区别是,您可以更多地处理UI,因为独立应用程序有状态UI:s,而web应用程序具有状态UI:s,在某些情况下,状态UI:s仅模拟有状态UI:s。由于这种差异,处理独立应用程序更容易,但这值得讨论另一个主题,与JavaBeans完全没有直接关系。

票数 65
EN

Stack Overflow用户

发布于 2009-11-13 13:50:58

一颗豆子真的没什么大不了的。要使类成为"bean",它所需要的就是:

  • 要有一个公共的,则没有参数构造函数。
  • 可序列化(直接或通过它的一个超类实现可序列化接口)。

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

您可以直接从Sun 这里中找到更多的信息。

票数 52
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1727603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档