科普一下jojo是什麼(到底什麼是POJO)
2023-10-13 08:19:16 3
科普一下jojo是什麼?POJO即「Plain Old Java Object」,下面我們將POJO與JavaBean進行比較,以及如何將POJO轉換為JavaBeans,今天小編就來說說關於科普一下jojo是什麼?下面更多詳細答案一起來看看吧!

科普一下jojo是什麼
概述POJO即「Plain Old Java Object」,下面我們將POJO與JavaBean進行比較,以及如何將POJO轉換為JavaBeans。
Plain Old Java Object什麼是POJO?一般當我們談論POJO時,描述的是一種簡單的類型,沒有涉及到任何框架。POJO對屬性和方法沒有命名約定。
當我們創建一個員工POJO,它具有三個屬性:fisrtName、lastName、startDate。
public class EmployeePojo { public String firstName; public String lastName; private LocalDate startDate; public EmployeePojo(String firstName, String lastName, LocalDate startDate) { this.firstName = firstName; this.lastName = lastName; this.startDate = startDate; } public String name { return this.firstName " " this.lastName; } public LocalDate getStart { return this.startDate; }}
EmployeePojo可以被任何Java程序使用,因為它沒有框架的束縛。但是,我們並沒有遵循任何真正的約定來構造、訪問、或者修改欄位的值。缺乏約定會導致兩個問題:
使用它的人會增加學習難度。它可能會限制框架支持約定而不是配置,了解如果使用它以及擴展。為了探究第二點,我們使用反射來獲取EmployeePojo的屬性。這樣,我們將發現它的一些局限性。
對POJO進行反射添加BeanUtils的Maven依賴到項目中:
commons-beanutilscommons-beanutils1.9.4
接下來,讓我們使用反射獲取POJO的屬性:
List propertyNames =Arrays.stream(PropertyUtils.getPropertyDescriptors(EmployeePojo.class)).map(PropertyDescriptor::getDisplayName).collect(Collectors.toList);System.out.println(propertyNames);
執行代碼,我們將看到:
[start]
是不是很懵逼?我們只看到了start (getStart),PropertyUtils找不到其他兩個屬性,甚至是真實的屬性。
如果你使用Jackson一樣的其他庫來處理,同樣也會遇到這個問題。理想情況下,我們將看到的結果是:firstName,lastName,startDate。好的消息是,許多的Java庫默認支持JavaBean的命名約定。
JavaBeans什麼是JavaBean?JavaBean仍然是POJO,但是它遵守一組嚴格的規則:
訪問級別 - JavaBean的屬性必須是私有的,get、set方法是public方法名稱 - getter和setter遵循getX和setX的約定(對於Boolean,isX替代getter)默認構造函數 - 必須存在無參的構造函數,一遍可以在不提供參數的情況下創建實例,例如:序列化期間可序列化 - 實現Serializable接口,允許存儲狀態EmployeePojo轉換為JavaBean我們嘗試將EmplyeePojo轉換為JavaBean:
public class EmployeeBean implements Serializable {private static final long serialVersionUID = 5570916775939868315L;private String firstName;private String lastName;private LocalDate startDate;public String getFirstName {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public LocalDate getStartDate {return startDate;}public void setStartDate(LocalDate startDate) {this.startDate = startDate;}}
對JavaBean進行反射當我們對JavaBean進行時,獲得了屬性的完整列表:
[firstName, lastName, startDate]
是否使用JavaBeans這裡展示了JavaBeans的一種用法。每個設計都需要權衡,當我們使用JavaBeans時,還應該注意一些潛在的問題:
可變性 - 我們的JavaBeans由於使用setter方法,隨時可以修改。這可能導致一些並發問題或者一致性問題靈活性 - 一般我們必須為所有的屬性設置一個值,其中大部分可能都是沒有必要的。例如使用JPA修改密碼時,我可能只需要userId和password無參構造函數 - 我們經常通過有參構造函數來確保對象以有效的狀態實例化,但是JavaBean標準要求我們提供了無參構造函數結論我們將POJO與JavaBeans進行了比較,POJO是一個沒有任何約束且沒有特定框架綁定的Java對象,而JavaBean時具有嚴格約定的POJO的一種特殊類型。
,