Java Beans সাধারণত একটি ক্লাস হিসেবে তৈরি করা হয় যার প্রপার্টি থাকে, এবং সেগুলির উপর getter/setter মেথড থাকে। তবে কখনও কখনও আপনাকে Dynamic Beans তৈরি এবং runtime-এ beans পপুলেট করতে হতে পারে, যেমন ডায়নামিক ফর্ম ভ্যালিডেশন, ডেটাবেসের ভিন্ন ভিন্ন ইনপুটের জন্য প্রপার্টি তৈরি ইত্যাদি। এই ধরনের পরিস্থিতিতে, BeanUtils এবং Reflection API ব্যবহার করে Runtime Bean Creation এবং Dynamic Beans পপুলেট করা সম্ভব।
চলুন, আমরা দেখব কিভাবে Java Beans ডায়নামিকভাবে তৈরি এবং পপুলেট করা যায়।
১. Dynamic Beans পপুলেট করা
Dynamic Bean Population মানে হচ্ছে runtime-এ Java Bean-এর প্রপার্টি কপি বা পপুলেট করা। আপনি যখন অজানা বা ভেরিয়েবল ডেটার সাথে কাজ করেন, তখন Reflection API বা Apache Commons BeanUtils ব্যবহার করে beans-এর প্রপার্টি পপুলেট করতে পারেন।
উদাহরণ: Dynamic Bean Population using BeanUtils
ধরা যাক, আপনার কাছে একটি Bean রয়েছে এবং আপনি runtime-এ সেই Bean-এর প্রপার্টি পপুলেট করতে চান।
import org.apache.commons.beanutils.BeanUtils;
public class DynamicBeanExample {
public static void main(String[] args) {
try {
// Create a source object with dynamic properties
Person person = new Person();
BeanUtils.setProperty(person, "name", "John Doe");
BeanUtils.setProperty(person, "age", 30);
// Output the dynamically populated properties
System.out.println("Name: " + person.getName()); // Output: John Doe
System.out.println("Age: " + person.getAge()); // Output: 30
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
// Getter and setter methods
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}ব্যাখ্যা:
- এখানে BeanUtils.setProperty() মেথড ব্যবহার করা হয়েছে
personobject-এর প্রপার্টি (যেমনname,age) পপুলেট করতে। এটি ডায়নামিকভাবে runtime-এ প্রপার্টি সেট করে। nameএবংageপ্রপার্টি গুলি BeanUtils এর মাধ্যমে সেট করা হচ্ছে, যেহেতু এটি runtime-এ এই প্রপার্টিগুলির নাম জানে না।
২. Runtime Bean Creation (ডায়নামিকভাবে Bean তৈরি করা)
Java Bean তৈরি করার প্রক্রিয়া সাধারণত constructor এবং setter/getter মেথডের মাধ্যমে সম্পন্ন হয়। তবে Reflection API ব্যবহার করে আমরা runtime-এ Bean তৈরি করতে পারি। এর মাধ্যমে Java Class ডায়নামিকভাবে লোড এবং ইন্সট্যান্স তৈরি করা সম্ভব হয়।
উদাহরণ: Runtime Bean Creation using Reflection
import java.lang.reflect.Constructor;
public class RuntimeBeanCreationExample {
public static void main(String[] args) {
try {
// Dynamically create Person class object using reflection
Class<?> personClass = Class.forName("Person");
Constructor<?> constructor = personClass.getConstructor(String.class, int.class);
// Create a Person object dynamically
Object person = constructor.newInstance("Alice", 25);
// Print the dynamically created object data
System.out.println("Name: " + personClass.getMethod("getName").invoke(person));
System.out.println("Age: " + personClass.getMethod("getAge").invoke(person));
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
// Constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Getter methods
public String getName() {
return name;
}
public int getAge() {
return age;
}
}ব্যাখ্যা:
- Reflection API ব্যবহার করে
Personক্লাসের একটি runtime অবজেক্ট তৈরি করা হয়েছে। Class.forName("Person")দিয়ে Person ক্লাসটি লোড করা হয়েছে এবংgetConstructor()দিয়ে constructor পাওয়া গেছে।newInstance()মেথড ব্যবহার করে runtime-এPersonঅবজেক্ট তৈরি করা হয়েছে, এবংgetName()এবংgetAge()মেথডের মাধ্যমে ডেটা অ্যাক্সেস করা হয়েছে।
Reflection API এর মাধ্যমে আপনি class নাম জানলেও এর constructor এবং method অ্যাক্সেস করতে পারেন এবং runtime-এ object তৈরি করতে পারেন।
৩. Dynamic Beans with Map (Map ব্যবহার করে ডায়নামিক Beans পপুলেট করা)
যখন আপনার কাছে Map অবজেক্ট থাকে এবং আপনি সেই Map থেকে ডায়নামিকভাবে Java Bean পপুলেট করতে চান, তখন আপনি BeanUtils.populate() ব্যবহার করতে পারেন।
উদাহরণ: Map থেকে Bean পপুলেট করা
import org.apache.commons.beanutils.BeanUtils;
import java.util.HashMap;
import java.util.Map;
public class MapToBeanExample {
public static void main(String[] args) {
try {
// Create a map with dynamic properties
Map<String, String> properties = new HashMap<>();
properties.put("name", "John");
properties.put("age", "30");
// Create a Person object
Person person = new Person();
// Populate the Person object with properties from the map
BeanUtils.populate(person, properties);
// Output the populated properties
System.out.println("Name: " + person.getName()); // Output: John
System.out.println("Age: " + person.getAge()); // Output: 30
} catch (Exception e) {
e.printStackTrace();
}
}
}ব্যাখ্যা:
- এখানে একটি Map ব্যবহার করে ডায়নামিকভাবে
Personobject পপুলেট করা হয়েছে। BeanUtils.populate()মেথড ব্যবহার করে Map এর মান Person ক্লাসের প্রপার্টিnameএবংageতে পপুলেট করা হয়েছে।
৪. Dynamic Property Setting using Reflection API
আপনি Reflection API ব্যবহার করে runtime-এ Java Bean এর প্রপার্টি সেট করতে পারেন।
উদাহরণ: Reflection API দিয়ে ডায়নামিক প্রপার্টি সেট করা
import java.lang.reflect.Method;
public class DynamicPropertySettingExample {
public static void main(String[] args) {
try {
// Create a Person object
Person person = new Person("John", 30);
// Get the setter method for 'name' property
Method setNameMethod = person.getClass().getMethod("setName", String.class);
setNameMethod.invoke(person, "Alice");
// Output the dynamically set property
System.out.println("Updated Name: " + person.getName()); // Output: Alice
} catch (Exception e) {
e.printStackTrace();
}
}
}ব্যাখ্যা:
- Reflection API ব্যবহার করে
Personঅবজেক্টের setName() মেথড রিফ্লেক্টিভলি কল করা হয়েছে এবং প্রপার্টি সেট করা হয়েছে।
সারাংশ
- Dynamic Beans পপুলেট করা: আপনি BeanUtils ব্যবহার করে runtime-এ Java Bean-এর প্রপার্টি কপি এবং পপুলেট করতে পারেন। এটি ডায়নামিক ফর্ম ইনপুট বা ডেটাবেস থেকে প্রাপ্ত ভ্যালু পপুলেট করতে সহায়ক।
- Runtime Bean Creation: Reflection API ব্যবহার করে আপনি runtime-এ Java Bean তৈরি করতে পারেন, যেখানে Bean-এর constructor এবং methods রিফ্লেক্টিভলি অ্যাক্সেস করা হয়।
- Map থেকে Bean পপুলেট করা: BeanUtils.populate() ব্যবহার করে আপনি Map থেকে Java Bean পপুলেট করতে পারেন, যা ডায়নামিক ডেটা হ্যান্ডলিং এর জন্য উপযোগী।
Read more