什么是JavaBean,为什么需要它?既然我可以使用类和接口结构创建所有应用程序?我为什么需要豆子?你能给我一些例子,其中bean是必不可少的而不是类和接口吗?
请在下文中解释bean的必要性:
答案 0 :(得分:163)
它们通常只代表真实世界的数据。这是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);
}
}
实现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;
例如,在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);
}
例如,在JSP页面中,您可以按照Javabean约定<{3}} 访问来显示数据:
<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>
有意义吗?你知道,这是一种约定,您可以在任何地方使用存储,传输和访问数据。< / p>
答案 1 :(得分:57)
JavaBeans无处不在,它们是一种惯例,几乎每一个略大的库都使用这些约定来实现自动化。只是为什么要使用JavaBeans的几个原因:
当然还有Enterprise JavaBeans这是另一回事,不应该与普通的JavaBeans混合使用。我只是想提一下EJB:s因为名字很相似,很容易让这两个人混淆。
如果您在Web应用程序环境中考虑“普通”JavaBeans,那么它们比在您的腿上穿鞋更有意义。由于Servlet规范要求会话可序列化,这意味着您应该将会话中的数据存储为可序列化的 - 为什么不将它作为bean呢?只需将SomeBusinessDataBean抛入会话中,您就可以轻松,轻松,符合规范并且方便。
同样,在应用程序中传输数据也很容易,因为JavaBeans可以帮助您完全解耦部分应用程序。将JavaBeans视为一个字母和应用程序的各个子系统作为一个非常大的公司中的部门:Dept.A将大量数据邮寄给Dept.B,Dept.B不知道 - 甚至关心 - 数据来自于应有的数据,只需打开信件,从中读取信息并根据数据执行操作。
实际上上面的内容也适用于独立应用程序,唯一的区别是你可以更多地使用UI,因为独立应用程序具有状态UI:s而web应用程序具有statelss UI:s在某些情况下只模拟有状态UI:秒。由于存在这种差异,因此使用独立应用程序更容易混乱,但这值得另外一个主题,并且根本不与JavaBeans直接相关。
答案 2 :(得分:48)
真的,豆子不算什么。要使一个类成为“bean”,它只需要:
为此,如果您希望在某些情况下可以发现字段,则可以为符合特定命名约定的类的属性添加getter和setter(例如,使某个对象可以从视觉中拖放)例如,IDE中的编辑器。
您可以直接从Sun here找到更多信息。
答案 3 :(得分:15)
Java Bean是一种软件组件,可以在各种不同的环境中重用。 Bean的功能没有限制。它可以执行简单的功能,例如检查文档的拼写,或复杂的功能,例如预测股票投资组合的表现。 Bean可能对最终用户可见。其中一个例子是图形用户界面上的按钮。 Bean也可能对用户不可见。实时解码多媒体信息流的软件是这种类型的构建块的一个例子。最后,Bean可以被设计为在用户的工作站上自主工作或者与一组其他分布式组件协同工作。从一组数据点生成饼图的软件是可以在本地执行的Bean的示例。但是,从库存或商品交易所提供实时价格信息的Bean需要与其他分布式软件合作才能获取其数据。
我们将很快看到软件开发人员必须对某个类进行哪些具体更改,以便它可用作Java Bean。但是,Java设计者的目标之一是使这项技术易于使用。因此,代码更改很少。
Java Bean的优点
软件组件体系结构提供了处理软件构建块的标准机制。以下列表列举了Java技术为组件开发人员提供的一些特定优势:
以下是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;
}
}
这是一个名为MyBean的真实Bean,其状态(变量theValue)将由JavaBeans持久性机制自动保存和恢复,并且它具有可视可编程环境可用的名为MyValue的属性。这个Bean没有任何可视化表示,但这不是JavaBean组件的要求。