使用JavaBeans的地方?

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

请在下面的上下文中解释一下bean的本质:

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

  • 它们通常只代表真实世界的数据。 这里是一个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约定的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>
    

    是否有意义? 你看,这是一种可以在任何地方用来存储,传输和访问数据的惯例

    也可以看看:

  • JavaBeans规范

  • 豆自己

    JavaBeans无处不在,它们是一个约定,几乎每个稍微大一点的库都使用这些约定来自动化事物。 JavaBeans应该被使用的几个原因:

  • 他们序列化很好。
  • 可以使用反射来实例化。
  • 否则可以很容易地使用反射进行控制。
  • 适合封装来自业务代码的实际数据。
  • 常规约定意味着任何人都可以使用你的豆,而且你可以使用任何其他人的豆,没有任何形式的文档/手册轻松,一致的方式。
  • 非常接近POJO,这实际上意味着系统的不同部分之间的更多互操作性。
  • 当然,Enterprise JavaBeans也是另外一个问题,不应该与纯JavaBeans混合使用。 我只是想提到EJB:因为名称很相似,很容易让这两者混淆。

    豆类在Web应用程序中

    如果您在Web应用上下文中考虑“普通”的JavaBeans,那么它们比在您的腿上穿鞋更有意义。 由于Servlet规范要求会话是可序列化的,这意味着您应该将会话中的数据存储为可序列化的数据 - 为什么不把它变成一个bean呢? 只需将您的SomeBusinessDataBean放入会话中,您就可以轻松实现,符合规范且方便。

    同时在应用程序中传输数据也很容易,因为JavaBeans可以帮助您完全分离应用程序的各个部分。 将JavaBeans视为一封信,并将应用程序的各种子系统视为一个非常大的公司内的部门:Dept.A将大量数据寄给Dept.B,Dept.B不知道 - 甚至是Care-数据来自哪里因为它应该是,并且可以打开信件,从中读取信息并基于该信息做它的事情。

    豆在独立的应用程序

    实际上,以上内容也适用于独立应用程序,唯一的区别是您可以更多地混淆UI,因为独立应用程序具有有状态UI:s Web应用程序具有statelss UI:在某些情况下,它仅模拟有状态UI:s 。 由于这种差异,与独立应用程序混淆更容易,但这值得整个另一个话题,并且与JavaBeans根本没有直接关系。


    一个bean没什么,真的。 对于一个类是“bean”,它只需要:

  • 有一个公共的,没有参数的构造函数
  • 是可序列化的(通过直接或通过它的一个超类来实现Serializable接口)。
  • 为此,如果您希望字段在某些情况下可被发现(例如,让您的某个对象可以从您的可视化编辑器中拖放),则可以为符合特定命名约定的类的属性添加getter和setter IDE)。

    你可以在这里直接找到Sun。

    链接地址: http://www.djcxy.com/p/47641.html

    上一篇: Places where JavaBeans are used?

    下一篇: How can I add reflection to a C++ application?