Tôi dự định sẽ đăng tải một bài viết tiếp theo về Java Annotation, tuy nhiên nó có liên quan đến Java Reflection. Nếu như bạn đọc có thể áp dụng Annotation vào phần công việc của mình thì sẽ rất tốt. Nhưng để cho bài viết liên quan đến Annotation có giá trị hơn tôi quyết định đăng tải một số bài viết về Java Reflection trước khi tiếp tục chia sẻ.

Java Reflection là gì?

Java Reflection cho phép chúng ta sử dụng nó để khám phá các class, interface, field và method tại thời điểm chạy (runtime) mà chúng ta cần biết các class, method,... khi compile. Nó cho phép chúng ta khởi tạo một đối tượng, gọi các phương thức, get/set giá trị của các field khi sử dụng.
Giới thiệu về Java Reflection

Java Reflection khá mạnh mẽ và rất hữu ích đối với những ai hiểu rõ về nó. Ví dụ, bạn có thể ánh xạ (mapping) đối tượng thành table dưới database tại thời điểm runtime. Kỹ thuật này các bạn có thể thấy rõ nhất ở JPA và Hibernate nếu đang tìm hiểu về Spring. Ngoài ra, tôi thường sử dụng Java Reflection để Map chính xác URL khi làm việc với Servlet, Object parsing,...

Tôi dám cá rằng, khi bạn tìm hiểu và nắm bắt được trọn vẹn về Java Reflection, bạn sẽ thấy nó trở nên hữu ích trong nhiều trường hợp. Mà thay vào đó bạn đang làm thủ công nhiều công việc trước đây mình đã áp dụng khi học Java Core.

Đây là một bài viết giới thiệu về Java Reflection. Do đó, tôi sẽ không đề cập đến tất cả những gì nó có thể thực hiện mà trong các bài viết kế tiếp bạn sẽ thấy được sức mạnh của nó. Toàn bộ hướng dẫn về Java Reflection sẽ giải thích cơ bản về nó, bao gồm cách làm việc với mảng, annotation, generic và dynamic proxies, dynamic class loading và reloading.

Ví dụ đơn giản về Java Reflection

Có thể tôi khá dài dòng về giới thiệu, thay vào đó một đoạn ví dụ bên dưới đây sẽ giúp bạn thấy được ưu điểm của Java Reflection.

1. Hãy tạo một lớp mới và đặt tên là Person.java sau đó tạo nội dung cho lớp này giống như đoạn code mẫu bên dưới đây.
package com.vanthuong.tutorial;

public class Person {
 private Long id;
 private String firstName;
 private String lastName;
 private String address;

 public Long getId() {
  return id;
 }

 public void setId(Long id) {
  this.id = id;
 }

 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 String getAddress() {
  return address;
 }

 public void setAddress(String address) {
  this.address = address;
 }
}

2. Tạo một lớp mới với tên Application.java và copy đoạn code bên dưới vào, sau đó run chương trình và xem kết quả.
package com.vanthuong.tutorial;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Application {
 public static void main(String[] args) {
  System.out.println("++Danh sach cac field da khai bao++");
  
  Field[] fields = Person.class.getDeclaredFields();
  for(Field field : fields) {
   System.out.println("field = " + field.getName());
  }
  
  System.out.println("++Danh sach cac method cua lop Person++");
  Method[] methods = Person.class.getMethods();
  for(Method method : methods){
      System.out.println("method = " + method.getName());
  }
 }
}

Bài viết tiếp theo:
Khám phá class bằng Java Reflection