javajavabeans

Places where JavaBeans are used?


What is a JavaBean and why do I need it? Since I can create all apps with the class and interface structure? Why do I need beans? And can you give me some examples where beans are essential instead of classes and interfaces?

Please explain the essentiality of a bean in the below context:


Solution

  • They often just represent real world data. Here's a simple example of a 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 user) && (id != null) ? id.equals(user.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);
        }
    }
    

    Implementing Serializable is not per se mandatory, but very useful if you'd like to be able to persist or transfer Javabeans outside Java's memory, e.g. in harddisk or over network. One well known example is shared HTTP session storage for a cluster of servers ("cloud"). Otherwise you'll face NotSerializableException on these cases.

    In for example a DAO class you can use it to store the data retrieved from the user table of the database:

    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;
    

    In for example a Servlet class you can use it to transfer data from the database to the UI:

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
        List<User> users = userDAO.list();
        request.setAttribute("users", users);
        request.getRequestDispatcher("/WEB-INF/users.jsp").forward(request, response);
    }
    

    In for example a JSP page you can access it by EL, which follows the Javabean conventions, to display the data:

    <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>
    

    Does it make sense? You see, it's kind of a convention which you can use everywhere to store, transfer and access data.

    See also: