JavaBeans被使用的地方?

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

请在下面的上下文中解释一下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也是另外一个问题,不应该和普通的JavaBean混合在一起。 我只是想提到EJB:因为名称是相似的,很容易让这两者混淆。

豆在Web应用程序

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

同时在应用程序中传输数据也很容易,因为JavaBeans可以帮助您完全分离应用程序的各个部分。 将JavaBeans视为一封信,并将应用程序的各个子系统作为一个非常大的公司的部门来考虑:Dept.A将一堆数据发送给Dept.B,Dept.B不知道 – 甚至不关心 – 数据来自哪里因为它应该是,可以打开信件,从它读取的东西,并根据这些数据做它的事情。

豆在独立的应用程序

实际上,上述方法也适用于独立应用程序,唯一的区别是你可以更多地混淆用户界面,因为独立应用程序具有有状态的用户界面,而Web应用程序具有状态界面,在某些情况下只能模拟有状态的用户界面: 。 由于这种差异,更容易弄乱独立的应用程序,但这是值得一个整体的另一个话题,并没有直接关系到JavaBeans。

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

  • 有一个公共的,没有参数的构造函数
  • 是可序列化的(通过直接或通过其一个超类实现Serializable接口)。

为此,如果您希望某些情况下可以发现这些字段(例如,使您的某个对象可以从您的可视化编辑器中拖放),则可以为符合特定命名约定的类的属性添加getter和setter IDE)。

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

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

我们将很快看到软件开发人员必须对类进行哪些特定的更改,以使其可用作Java Bean。 但是,Java设计者的目标之一就是使这种技术变得容易。 因此,代码更改是最小的。

Java Bean的优点

软件组件体系结构提供了处理软件构建块的标准机制。 以下列表列举了Java技术为组件开发人员提供的一些具体优势:

  • Bean获得了Java“一次写入,随处运行”范例的所有好处。
  • 可以控制暴露给应用程序构建器工具的Bean的属性,事件和方法。
  • Bean可以被设计为在不同的地区正确运行,这使得它在全球市场中有用。
  • 辅助软件可以帮助一个人配置一个Bean。 只有在设置了该组件的设计时参数时才需要该软件。 它不需要包含在运行时环境中。
  • Bean的配置设置可以保存在持久存储器中,并在稍后恢复。
  • Bean可以注册接收来自其他对象的事件,并可以生成发送给其他对象的事件。

下面是一个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组件的要求。