Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaBeans的地方?_Java_Javabeans - Fatal编程技术网

使用JavaBeans的地方?

使用JavaBeans的地方?,java,javabeans,Java,Javabeans,什么是JavaBean?我为什么需要它?既然我可以创建具有类和接口结构的所有应用程序?为什么我需要豆子?你能给我举一些例子,说明bean是必不可少的,而不是类和接口吗 请在以下上下文中解释bean的重要性: Wep应用程序 独立应用程序 豆子本身 到处都是,它们是一种约定,几乎每个稍微大一点的库都使用这些约定来实现自动化。以下是使用JavaBeans的几个原因: 它们很好地序列化 可以使用反射进行实例化 否则可以很容易地使用反射进行控制 用于封装来自业务代码的实际数据 通用约定意味着任何人都

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

请在以下上下文中解释bean的重要性:

  • Wep应用程序
  • 独立应用程序
豆子本身 到处都是,它们是一种约定,几乎每个稍微大一点的库都使用这些约定来实现自动化。以下是使用JavaBeans的几个原因:

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

web应用程序中的bean 如果你在Web应用环境中考虑“正常”的JavaBeans,他们比穿你的脚穿鞋子更有意义。由于Servlet规范要求会话是可序列化的,这意味着您应该将数据作为可序列化的内容存储在会话中——那么为什么不将其变成bean呢!只要将您的SomeBusinessDataBean放入会话中,您就可以很好地运行了,非常简单,符合规范,而且非常方便

另外,围绕应用程序传输数据也很容易,因为JavaBeans可以帮助您完全解耦应用程序的各个部分。将JavaBeans视为一封信,将应用程序的各个子系统视为一个非常大的公司中的部门:a部门向B部门发送一堆数据,B部门不知道——甚至不关心——数据从何而来,就像它应该的那样,只需打开信,从中读取内容,然后根据这些数据进行操作

独立应用程序中的bean
实际上,上述内容也适用于独立应用程序,唯一的区别是,您可能会对UI造成更大的麻烦,因为独立应用程序具有有状态的UI:s,而web应用程序具有有状态的UI:s,在某些情况下仅模拟有状态的UI:s。由于这种差异,很容易将独立应用程序搞得一团糟,但这是另一个值得讨论的话题,与JavaBeans完全没有直接关系。

它们通常只代表真实世界的数据。下面是一个简单的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,则非常有用

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

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;
List users=new ArrayList();
while(resultSet.next()){
用户=新用户();
user.setId(resultSet.getLong(“id”);
user.setName(resultSet.getString(“name”);
user.setBirthdate(resultSet.getDate(“生日”);
用户。添加(用户);
}
返回用户;
例如,在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);
}
protectedvoid doGet(HttpServletRequest请求,HttpServletResponse响应){
List users=userDAO.List();
setAttribute(“用户”,用户);
getRequestDispatcher(“users.jsp”).forward(请求、响应);
}
例如,在一个JSP页面中,您可以访问它,它遵循Javabean约定,以显示数据:


身份证件
名称
生日
${user.id}
这有意义吗?你看,这是一种惯例,你可以在任何地方使用它来存储、传输和访问数据

另见:

    • 一粒豆子其实没什么大不了的。对于要成为“bean”的类,它只需要:

      • 要拥有公共的、无参数的构造函数
      • 可序列化(直接或通过其超类之一实现可序列化接口)
      为此,如果希望在某些情况下可以发现字段(例如,使该类成为可以从IDE中的可视化编辑器拖放的对象),则可以为符合特定命名约定的类的属性添加getter和setter


      您可以直接从Sun上找到更多信息。

      JavaBean是一种软件组件,它被设计为可在各种不同的环境中重用。Bean的功能没有限制。它可以执行简单的功能,如检查文档的拼写,也可以执行复杂的功能,如预测股票组合的表现。最终用户可以看到Bean。其中一个例子是图形用户界面上的按钮。Bean也可能对用户不可见。实时解码多媒体信息流的软件就是这种构造块的一个例子。最后,Bean可以被设计成在用户的工作站上自主工作,或者与一组其他分布式组件协同工作。从一组数据点生成饼图的软件就是可以在本地执行的Bean的一个例子。然而,从股票或商品交易所提供实时价格信息的Bean需要与其他分布式软件合作以获取其数据

      我们将很快看到软件开发人员必须对类进行哪些特定的更改,以便
      public class MyBean implements java.io.Serializable
      {
      
             protected  int theValue;
      
             public MyBean()
             {
             }
      
             public void setMyValue(int newValue)
             {
                 theValue = newValue;
             }
      
            public int getMyValue()
            {
                 return theValue;
            }
      
      }