什么是 JavaBean,我为什么需要它?既然我可以创建具有类和接口结构的所有应用程序?为什么我需要豆子?你能给我一些例子,说明 bean 是必不可少的,而不是类和接口吗?
请在以下上下文中解释 bean 的本质:
它们通常只代表现实世界的数据。下面是一个 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 内存之外(例如在硬盘中或通过网络)持久化或传输 Javabean,则非常有用。
Serializable
例如,在 DAO 类中,您可以使用它来创建用户列表,您可以在其中将表的数据 存储user在数据库中:
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 约定的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>
是否有意义?你看,这是一种 约定 ,你可以在任何地方使用它来 存储 、 传输 和 访问 数据。