我不确定有什么区别。我正在使用Hibernate,在一些书中,他们使用JavaBean和POJO作为可互换的术语。我想知道是否有区别,不仅仅是在Hibernate上下文中,而是在一般概念上。
当前回答
POJO:如果这个类可以在底层JDK中执行,而不需要任何外部第三方库的支持,那么它就被称为POJO
JavaBean:如果类只包含带有访问器(setter和getter)的属性,则称为JavaBean。JavaBean通常不包含任何业务逻辑,而是用于保存一些数据。
所有的爪哇人都是POJO,但并非所有POJO都是爪哇人
其他回答
JavaBean遵循某些约定。Getter/setter命名,具有公共默认构造函数,可序列化等。有关更多细节,请参阅JavaBeans公约。
POJO(普通旧java对象)的定义并不严格。它是一个Java对象,不需要实现特定的接口或从特定的基类派生,也不需要使用特定的注释来与给定的框架兼容,它可以是任何任意的(通常相对简单)Java对象。
所有的javabean都是pojo,但并非所有的pojo都是javabean。
JavaBean是满足某些编程约定的Java对象:
JavaBean类必须实现Serializable或Externalizable; JavaBean类必须有一个公共的无参数构造函数; 所有JavaBean属性必须有公共setter和getter方法(视情况而定); 所有JavaBean实例变量都应该是私有的。
POJO:如果这个类可以在底层JDK中执行,而不需要任何外部第三方库的支持,那么它就被称为POJO
JavaBean:如果类只包含带有访问器(setter和getter)的属性,则称为JavaBean。JavaBean通常不包含任何业务逻辑,而是用于保存一些数据。
所有的爪哇人都是POJO,但并非所有POJO都是爪哇人
综上所述:相同点和不同点是:
java beans: Pojo:
-must extends serializable -no need to extends or implement.
or externalizable.
-must have public class . - must have public class
-must have private instance variables. -can have any access specifier variables.
-must have public setter and getter method. - may or may not have setter or getter method.
-must have no-arg constructor. - can have constructor with agruments.
所有JAVA bean都是POJO,但并非所有POJO都是JAVA bean。
所有Pojo(s)都是JavaBean(s),但并非相反。
什么是POJO?
POJO没有属性或方法的命名约定。对于构造、访问和修改类的状态,我们没有遵循任何真正的约定。 例子: 公共类Pojo { 字符串名字; LASTName; 字符串名称(){ 返回。firstname + " " + this.LASTName; } } 在这里,我可以用first_name或firstname或任何名词替换firstname,变量LASTName也一样。
这个词之所以被广泛接受,很可能是因为 需要一个常见的和容易理解的术语,与 复杂的对象框架
使用POJO的反射。
它可能会限制框架偏好约定而不是配置、理解如何使用类以及增强其功能的能力
List<String> propertyNames =
Arrays.stream(PropertyUtils.getPropertyDescriptors(Pojo.class))
.map(PropertyDescriptor::getDisplayName)
.collect(Collectors.toList());
System.out.println(propertyNames);
如果我们使用第三方库PropertyUtils进行反射,我们可能会遇到问题,因为这会导致
[]
什么是Java Beans?
A JavaBean is still a POJO but introduces a strict set of rules around how we implement it: Access levels – our properties are private and we expose getters and setters. Method names – our getters and setters follow the getX and setX convention (in the case of a boolean, isX can be used for a getter) Default Constructor – a no-argument constructor must be present so an instance can be created without providing arguments, for example during deserialization Serializable – implementing the Serializable interface allows us to store the state.
例子:
@Getter
@Setter
class Pojo implements Serializable {
public String firstName;
public String lastName;
}
使用Java Bean进行反射。
If we again use third party Libraries such as `PropertyUtils` for reflection the result will be different[firstName,lastName]
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 数据挖掘中分类和聚类的区别?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder