前端视角 Java Web 入门手册 4.4:Web 开发基础—— Java Bean

在 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 对象,不受任何特殊框架或规范的限制。它通常没有业务逻辑,仅用于数据存储和传输。两者有以下区别

  1. 规范要求
    • Java Bean:需遵循特定的编程规范(如无参构造方法、Getter 和 Setter 方法、实现 Serializable 接口)。
    • POJO:不需要遵循任何特定的规范,更加灵活。
  2. 用途
    • 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;
    }
}
相关推荐
IDRSolutions_CN10 分钟前
PDF 转 HTML5 —— HTML5 填充图形不支持 Even-Odd 奇偶规则?(第二部分)
java·经验分享·pdf·软件工程·团队开发
hello早上好13 分钟前
Spring不同类型的ApplicationContext的创建方式
java·后端·架构
roman_日积跬步-终至千里14 分钟前
【Go语言基础【20】】Go的包与工程
开发语言·后端·golang
HelloWord~1 小时前
SpringSecurity+vue通用权限系统2
java·vue.js
让我上个超影吧1 小时前
黑马点评【基于redis实现共享session登录】
java·redis
00后程序员2 小时前
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
后端
HyggeBest2 小时前
Mysql的数据存储结构
后端·架构
TobyMint2 小时前
golang 实现雪花算法
后端
G探险者2 小时前
【案例解析】一次 TIME_WAIT 导致 TPS 断崖式下降的排查与优化
后端
BillKu2 小时前
Java + Spring Boot + Mybatis 插入数据后,获取自增 id 的方法
java·tomcat·mybatis