前端视角 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;
    }
}
相关推荐
凤凰院凶涛QAQ2 小时前
《Java版数据结构 & 集合类剖析》集合框架的封装设计与顺序表:“从 Iterable 到 ArrayList:集合框架的‘职业树“
java·开发语言·数据结构
孟华苏3 小时前
怎么快速排查内存泄漏问题
java·开发语言·python
noipp3 小时前
推荐题目:洛谷 P16510 [GKS 2015 #C] gRanks
java·c语言·开发语言·c++·python·算法
flyinmind3 小时前
Java环境与Android环境中使用QuickJS
java·开发语言·javascript·quickjs
不吃鱼的羊3 小时前
DaVinci Developer自动连接
java·开发语言
farerboy3 小时前
15-Java while 和 do...while循环
java·后端
在繁华处3 小时前
Java从零到熟练(十二):Java与AI工具整合
java·人工智能·python
凯瑟琳.奥古斯特3 小时前
力扣1235完整解法详解
java·开发语言·leetcode
quan_泉3 小时前
DIDCTF 取证初学者
java·服务器·前端
i220818 Faiz Ul3 小时前
民谣网站|基于Springboot的民谣网站管理系统(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·民谣网站