在 Java Web 开发中经常会听到 Java Bean,Java Bean 是指满足特定规则的 Java 类,用于封装数据,提供标准的访问方法,它是一种设计模式,旨在提高组件的可重用性和可维护性。JavaBeans 通过标准化的属性访问方法、事件机制和序列化支持,使得这些组件能够在不同的开发环境和工具中被轻松集成和使用。
约定
Java Bean 语法上无任何特殊之处,但遵守几个约定
- 提供无参构造函数:如果没有定义任何构造函数,编译器会自动提供一个默认的无参构造方法。如果自定义了带参构造方法,必须显式地定义一个无参构造方法
- 所有属性都是 private 的,并提供 getter/setter
- 类可序列化,用于持久化传输、保存
Java 有一个不成文的规定,如果要访问一个类的 private 字段,需要写 getter/setter 方法。如果属性名为 xxx,name getter 名为 getXXX,setter 名为 setXXX
基础语法
java
public class Person implements Serializable {
private String name = null;
private boolean deceased = false;
public Person() {
}
public String getName() {
return name;
}
public void setName(final String value) {
name = value;
}
public boolean isDeceased() {
return deceased;
}
public void setDeceased(final boolean value) {
deceased = value;
}
}
Java Bean 的用途
Java Bean 被广泛应用于各种 Java 技术和框架中,主要用于封装数据、管理资源、支持表单处理等
1. 数据传输对象 (DTO)
在不同层(如表示层和业务逻辑层)之间传输数据时,Java Bean 可以作为 数据传输对象,封装数据并提供标准化的访问方法。
java
public class UserDTO implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String email;
public UserDTO() {
}
// Getter and Setter methods...
}
2. 表单处理
在 Web 应用中,Java Bean 可以用于接收和验证用户提交的表单数据。Servlet 或 JSP 可以将表单数据映射到 Java Bean 实例,简化数据处理流程。
java
// UserForm.java
public class UserForm implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String password;
public UserForm() {
}
// Getter and Setter methods...
}
// 在 Servlet 中使用
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
UserForm form = new UserForm();
form.setUsername(request.getParameter("username"));
form.setPassword(request.getParameter("password"));
// 进一步处理表单数据
}
3. 组件开发
Java Bean 作为可重用的组件,可在多种应用程序中集成和使用。Java EE 中的 Enterprise Java Bean (EJB) 扩展了 Java Bean 的概念,支持分布式应用和事务管理等高级功能。
java
// Simple Component Bean
public class CalculatorBean implements Serializable {
private static final long serialVersionUID = 1L;
private int operand1;
private int operand2;
public CalculatorBean() {
}
// Getter and Setter methods...
public int add() {
return operand1 + operand2;
}
public int subtract() {
return operand1 - operand2;
}
}
4. 配置管理
Java Bean 可用于封装应用程序的配置参数,通过标准化的访问方法,简化配置管理和动态更新。
java
public class AppConfig implements Serializable {
private static final long serialVersionUID = 1L;
private String dbUrl;
private String dbUser;
private String dbPassword;
public AppConfig() {
}
// Getter and Setter methods...
}
Java Bean 与 POJO 的区别
POJO(Plain Old Java Object) 是一个简单的 Java 对象,不受任何特殊框架或规范的限制。它通常没有业务逻辑,仅用于数据存储和传输。两者有以下区别
- 规范要求 :
- Java Bean:需遵循特定的编程规范(如无参构造方法、Getter 和 Setter 方法、实现 Serializable 接口)。
- POJO:不需要遵循任何特定的规范,更加灵活。
- 用途 :
- Java Bean:通常用于组件开发、数据传输对象 (DTO)、表单处理等场景,需要与各种框架和工具集成。
- POJO:用于简单的数据存储,无需与框架或工具集成。
POJO 示例:
java
public class Product {
public String name;
public double price;
}
JavaBean 示例:
java
import java.io.Serializable;
public class Product implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private double price;
public Product() {
}
// Getter and Setter for name
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// Getter and Setter for price
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}