Lớp POJO trong Java - Sự khác biệt giữa POJO và JavaBean
17/08/2021 02:04
Qua những bài viết trước, hẳn bạn đã nắm rõ về các đối tượng cơ bản trong Java. Trong bài viết này, chúng ta sẽ tìm hiểu về một đối tượng đặc biệt là POJO (Plain Old Java Object) được sử dụng để tăng khả năng tái sử dụng và khả năng đọc của chương trình. Chúng ta cũng sẽ thảo luận về cách sử dụng lớp Java POJO và tại sao lại cần phải biết về POJO trong Java.
Lớp POJO trong Java là gì?
POJO là viết tắt của Plain Old Java Object là một đối tượng bình thường không bị ràng buộc với các hạn chế đặc biệt. Chúng chỉ bị ràng buộc với một số hạn chế về Java Language Specifications. Một cách đơn giản, POJO hoạt động như một cấu trúc dữ liệu thuần túy có các phương thức getter và setter. Đối tượng POJO không yêu cầu bất kỳ classpath nào. POJO là lớp được sử dụng rộng rãi nhất trong Java vì nó rất dễ viết và dễ hiểu. Sun Microsystems đã giới thiệu lớp POJO trong Java trong EJB 3.0.
Lớp POJO có thể ghi đè các phương thức nhất định như Serializable hoặc cũng có thể từ lớp Object.
Một lớp POJO không được làm những việc sau:
- Một lớp POJO không được mở rộng các lớp xác định trước như Array, HttpServlet,.... Ví dụ, nếu chúng ta viết, public class MyClass extends javax.servlet.http.HttpServlet, thì sau đó lớp MyClass không thể được coi như lớp POJO.
- Một lớp POJO không được chứa các chú thích được chỉ định trước . Ví dụ, @Retention(RetentionPolicy.RUNTIME) public class MyClass{..} không phải là một lớp POJO.
- Một lớp POJO không thể thực hiện các giao diện được xác định trước. Ví dụ: public class Test triển khai javax.ejb.EntityBean {…} không thể được coi là một lớp POJO.
>>> Đọc thêm: Giao diện Runnable trong Java - Nằm lòng về giao diện Java Runnable
Ví dụ về lớp POJO trong Java
Lớp POJO thường định nghĩa một thực thể. Ví dụ: nếu bạn muốn một lớp Intern thì bạn có thể tạo một POJO như sau:
// Intern POJO class to represent entity Intern
public class Intern {
// default field
String name;
// public field
public String role;
// private field
private double salary;
//arg-constructor to initialize fields
public Intern(String name, String role, double salary) {
this.name = name;
this.role = role;
this.salary = salary;
}
// getter method for name
public String getName() {
return name;
}
// getter method for role
public String getRole() {
return role;
}
// getter method for salary
public Double getSalary() {
return salary;
}
}
Ví dụ trên cho thấy một lớp POJO được định nghĩa rõ ràng. Trong ví dụ này, bạn có thể thấy rằng công cụ sửa đổi quyền truy cập của các trường không bị hạn chế. Chúng có thể có bất kỳ công cụ sửa đổi quyền truy cập nào như công khai, riêng tư, mặc định hoặc được bảo vệ. Bạn cũng có thể lưu ý rằng trong lớp POJO không cần thêm bất kỳ hàm tạo nào.
Chúng ta có thể sử dụng lớp POJO trong bất kỳ mã Java nào. Lớp POJO không bị ràng buộc với khuôn khổ. Nhưng chúng ta không thể triển khai lớp POJO này với bất kỳ quy ước thực sự nào để thay đổi trạng thái của lớp.
POJO hoạt động như một đối tượng kết hợp logic nghiệp vụ của ứng dụng. Hình sau cho thấy hoạt động của một lớp POJO. Từ hình ảnh, bạn có thể thấy rõ ràng bộ điều khiển tương tác với logic nghiệp vụ. Đến lượt mình, logic nghiệp vụ tương tác với lớp POJO để có quyền truy cập vào cơ sở dữ liệu.
>>> Đọc thêm: Giao diện so sánh trong Java - Tìm hiểu thêm về giao diện so sánh trong Java
Tìm hiểu qua về Java Beans
Java Beans là gì:
Java Beans là một loại POJO đặc biệt. Nhưng có một số hạn chế để Java Beans trở thành POJP. Những hạn chế này như sau:
- Tất cả Java Beans có thể là POJO nhưng tất cả các lớp POJO không thể là Java Beans
- Java Beans nên triển khai giao diện Serializable
- Tất cả các trường của Java Beans phải là riêng tư để cung cấp quyền kiểm soát hoàn toàn với các trường.
- Tất cả các trường phải có phương thức getter hoặc setter hoặc cả hai
- Phải có một hàm tạo no-arg trong bean
- Chúng ta chỉ có thể truy cập các trường bằng bộ thiết lập constructor hoặc getter
>>> Tham khảo: Khóa học lập trình Java
So sánh POJO trong Java với Java Beans
POJO |
JAVA BEAN |
Không có hạn chế nào với lớp POJO ngoài những lớp bị ép bởi Java Language Specifications |
Java Bean là một lớp POJO đặc biệt có một số hạn chế |
Lớp POJO không cung cấp nhiều quyền kiểm soát các trường |
Java Bean cung cấp toàn quyền kiếm soát các thành viên |
Lớp POJO có thể có hoặc không thể triển khai giao diện Serializable |
Java Bean phải thực hiện được giao diện Serializable |
Chúng ta có thể truy cập trực tiếp vào các trường bằng tên của chúng |
Chúng ta chỉ có thể truy cập các trường bên trong Java Bean bằng các phương thức getters và setters |
Có thể có các công cụ sửa đổi quyền truy cập cho các trường |
Các trường trong Java Bean là riêng tư |
Có hoặc không có hàm no -arg trong lớp POJO |
Có hàm tạo no -arg trong Java Beans |
Chúng ta sử dụng lớp POJO khi không cần đặt giới hạn cho các trường và có thể toàn quyền truy cập vào các trường |
Chúng ta sử dụng Java Beans khi không muốn cấp quyền truy cập hoàn toàn vào các thực thể |
Kết luận: Lớp POJO trong Java được sử dụng để nâng cao khả năng đọc mã. Bài viết trên đây đã giới thiệu tới bạn về lớp POJO phân biệt một số điểm khác biệt giữa POJO với Java Bean. Hy vọng bạn đã hiểu cách làm việc và triển khai của lớp POJO trong Java. Tìm hiểu thêm về Java và các ngôn ngữ lập trình khác qua các khóa học lập trình tại Viện Công nghệ thông tin T3H.
Source: Techvidan