深入理解 Java中 POJO 与 JavaBean 的区别

Java中经常能在Intellij中看到pojo这个类,这到底是干啥的呢?

在 Java 项目里你经常看到的 POJO 其实不是某个"特殊的类",而是一个
概念

📌 什么是 POJO?

POJO = Plain Old Java Object
直译:朴素的、普通的 Java 对象

意思就是:
👉 它是一个非常简单的 Java 类,里面只有一些 属性(fields) 和它们的
getter/setter 方法,可能再加上
toString()equals()hashCode(),除此之外没啥逻辑。

📌 为什么要有 POJO?

在企业开发(特别是 Java Web / Spring
项目)里,我们经常需要用类来承载一条数据记录,比如数据库中的一张表、前端传过来的
JSON 数据。
这个时候,就会用 POJO 来作为"数据载体"

比如数据库表 user

id name age


1 Bruce 25

对应的 Java POJO:

public class User {
    private int id;
    private String name;
    private int age;

    // getter/setter
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }

    @Override
    public String toString() {
        return "User{id=" + id + ", name='" + name + "', age=" + age + "}";
    }
}

这就是一个标准的 POJO 类

📌 POJO 在实际开发里的角色

  1. 和数据库表对应
    ORM 框架(如 MyBatis、Hibernate、JPA)会把数据库表的数据映射到
    POJO。

  2. 和前端交互
    Spring MVC 中,前端传来的 JSON 可以直接绑定到
    POJO,返回时也会序列化为 JSON。

  3. 数据传输对象(DTO)、实体类(Entity)
    DTO、Entity 本质上也是一种 POJO,只是职责不同。

📌 和其他名词的关系

  • POJO:普通的 Java 类(最广泛的概念)\
  • JavaBean:带有无参构造方法、属性可序列化、getter/setter 的
    POJO(可以当作更严格的 POJO)。\
  • Entity:持久化层的 POJO,和数据库表直接对应。\
  • DTO:数据传输对象,还是 POJO,只是用来在不同层之间传数据。

👉 总结一句话:
POJO 在 Java
项目里就是"纯粹的数据类",没有业务逻辑,主要用来装数据。


不是已经有了 JavaBean,为什么还要这个 POJO?

确实很多人一开始都会困惑:既然已经有 JavaBean,为什么又搞个
POJO

📌 先看 JavaBean 是什么

JavaBean 是 Sun 公司在 1997 年提出的一个组件规范,目的是让 Java
类能在可视化开发工具里(当时的 IDE)像积木一样拖拽复用。

JavaBean 的要求(约束):

  1. 必须有 无参构造方法\
  2. 属性必须是 私有的(private),并通过 getter/setter 暴露\
  3. 必须是 可序列化的(通常实现 Serializable 接口)

举个例子:

import java.io.Serializable;

public class UserBean implements Serializable {
    private String name;
    private int age;

    public UserBean() {} // 无参构造

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

这就是个标准 JavaBean

📌 POJO 的出现

POJO(Plain Old Java Object)这个概念大约在 2000 年前后流行起来,最早是
Martin Fowler 提出来的。

👉 它的意思就是:
"我们不想被 EJB(Enterprise JavaBean)、JavaBean
这些繁琐的规范限制住,我就写一个普通的类,想加 getter/setter
就加,想不加就不加,不一定要实现 Serializable,不一定要符合所谓的 Bean
规范。"

比如:

public class User {
    public String name;  // 甚至不加 private
    public int age;
}

这也是 POJO!
它没有遵循 JavaBean 规范,但依然是一个普通的 Java 对象。

📌 为什么要有 POJO?

因为 JavaBean 太"重"了。\

  • EJB、JavaBean 规范要求很多东西,写起来冗余,开发成本高。\
  • 但是在大多数业务里,我们只是需要一个"装数据的类"。\
  • 所以大家干脆就说:我们用 POJO,不要被 EJB 束缚。

于是 POJO 成为"轻量级编程"的旗帜,Spring、Hibernate、MyBatis
等框架都提倡用 POJO 来做实体类,而不是 EJB。

📌 JavaBean vs POJO 对比

特性 JavaBean ✅ POJO ✅
是否必须有无参构造
是否必须 private 属性
是否必须有 getter/setter
是否必须实现 Serializable
本质上 遵循规范的 POJO 普通 Java 对象(无约束)

👉 一句话总结:\

  • POJO 是一个更宽泛的概念,任何普通的 Java 对象都算。\
  • JavaBean 是一种特殊的 POJO,只是它必须遵循一定的规范。
posted @ 2025-09-24 19:18  AlphaGeek  阅读(6)  评论(0)    收藏  举报