在本教程中,我们将学习 Java 世界中一个非常基本的概念,它只不过是 Java 中的 POJO 是什么以及它与 Beans 有何不同。
此外,我们将看到如何将 POJO 转换为 bean。让我们开始教程。
Java中的POJO是什么?
POJO 代表普通旧 Java 对象。它是一个非常简单的对象,它没有界限,或者我们可以说它除了 Java 语言规范之外没有任何限制。此外,它不需要任何类路径。
这里出现了一个非常基本的问题,POJO 的实际用途和主要好处是什么?
POJO 的一大优势是它增加了我们项目代码的可读性和可重用性,开发人员在理解代码时发现它很容易。此外,POJO 易于编写,任何人都可以轻松理解它们。
现在让我们深入探讨一些关于 POJO 的技术术语。下面是关于 POJO 的几点说明:
- POJO 不必扩展预先指定的类。
- 其次,POJO 不应该实现任何预先指定的接口。
- 最后 POJO 不应包含预先指定的注释
基本上,当我们谈论 POJO 时,它只是定义了一个实体。例如,假设您想创建一个 Employee 类,那么您如何为此创建一个 POJO。下面是我们创建一个简单的 Employee POJO 类的示例,它简单地表示我们的 Employee Entity。
// our Employee POJO class and it simply represent Employee Entity
public class Employee
{
// public field
public String name;
// default field
String id;
// private field age
private Integer age;
//arg-constructor to initialize fields
public Employee(String name, String id,
Integer age)
{
this.name = name;
this.id = id;
this.age = age;
}
// getter method for name
public String getName()
{
return name;
}
// getter method for id
public String getId()
{
return id;
}
// getter method for age
public Integer getAge()
{
return age;
}
}
了解 POJO 在业务流程中的作用
让我们讨论上面的代码片段。在上面的代码片段中,您可以清楚地看到,在我们的 POJO 类中,我们对字段的访问修饰符没有任何限制。它们可以是私有的、受保护的、默认的或公共的。此外,没有强制在我们的 POJO 中包含任何构造函数。
下面是解释 POJO 在实际项目中使用的示例图。
如果您对 Java Web 世界或 Spring MVC 世界有一些基本知识,那么您必须知道控制器与服务层(我们实现业务逻辑的地方)交互。在服务或业务层中,我们与 POJO 类进行交互,以便我们可以与数据库进行交互。
通过分析上图,我们可以说 POJO 类与数据库实体具有相同的成员,在这种情况下,数据库实体由 POJO 类表示。
既然我们了解了 POJO,让我们转到 Bean 部分,让我们看看 POJO 和 Beans 之间的根本区别是什么。
了解 Java 中的特殊 POJO Bean
当我们谈论 Java 中的 bean 时,知道 Bean 是 POJO 的特殊类型非常重要。以下是关于 Java Bean 的一些要点:
- 所有的 Java Bean 都是 POJO。但反过来并非如此,并非所有 POJO 都是 Java Bean。
- 第二个重点是关于Serializable接口。他们应该实现 Serializable 接口,但仍有一些 POJOS 没有实现 Serializable 接口。由于它是一个标记接口,所以如果 POJO 不实现它们可序列化,则没有问题。
- Java Beans 中的字段呢?因此,所有字段都应该是私有的,这只是为了提供对代码的完全控制。
- 字段应该有 getter 和 setter,并且 bean 应该有一个无参数的构造函数。当涉及到访问字段时,可以使用 getter、setter 或构造函数来访问该字段。
Getter 和 Setter 的命名约定
在 Java bean 的情况下,getter 和 setter 有一些特殊的命名约定,它完全取决于字段名称。下面是 getter 和 setter 的示例语法:
getter 的示例语法:
public "returnType" getSomeProperty(){
return someProperty;
}
下面是 setter 的语法:
public void setSomeProperty(someProperty){
this.someProperty=someProperty;
}
并且 getter 和 setter 的可见性应该是公开的,以便任何其他对象也可以使用它。但是使用 setter 的实际好处是什么?
setter 的实际好处是,如果您想在设置之前检查特定场景的某些属性,那么 setter 起着重要作用。
假设我们有一个年龄字段,它不能为 0。但是如果有人将它设置为 0,那么您将无法控制它。但是通过使用 setter,您可以控制它并在年龄为 0 时返回 null。
下面是有人尝试将年龄设置为 0 的场景的代码片段:
// setter method for property
public void setProperty(Integer property)
{
if (property == 0)
{
// if property is 0 return
return;
}
this.property=property;
}
只需添加一个条件,如果年龄的值为 0,则返回 null。
POJO 和Beans的区别
为了更好地说明,让我们借助下表了解 Java 中 POJO 和 Bean 之间的区别。
POJO | 豆子 |
除了 Java 编程语言应用的限制之外,对 POJO 没有任何限制。 | 就 Beans 而言,存在一些限制,我们可以说它是一个特殊的有限制的 POJO。 |
POJO 没有为成员提供更多的控制。 | Beans 提供了对成员的完全控制,它帮助我们以更有效的方式实现业务逻辑。 |
在简单 POJO 字段的情况下,可以通过其名称访问。 | 在 Beans 中,只能使用 getter 和 setter 访问字段。 |
没有强制性的现场可见性,并且字段可以具有任何可见性。 | 但是在 Beans 的情况下,字段只有私有可见性。 |
当我们谈论 POJO 中的构造函数时,可能有也可能没有无参数的构造函数。 | Beans 必须有无参数的构造函数,以避免由于构造函数而导致代码中的任何异常错误。 |
它可以实现一个可序列化的接口。 | Beans 应该实现一个 Serializable 接口。如果不是,那么根据 Java 编码标准,它被认为是一种不好的编码实践。 |
当我们不想对字段和成员应用任何限制并希望向用户授予对实体的完全访问权限时使用它。 | 但是当我们想要对字段和成员应用限制并且只想将实体的某些部分提供给用户时使用它。 |
Java中POJO和Bean的区别
结论
这就是本教程的全部内容。希望你对这两个有基本的了解。
结论是 POJO 和 Beans 用于定义对象以增加代码的可读性和可重用性。但主要区别在于 POJO 没有任何限制,而 Bean 是特殊的 POJO,对它有一些限制。