Java প্রোগ্রামিং-এ Dynamic Bean Creation এবং Runtime Property Management গুরুত্বপূর্ণ, যখন অ্যাপ্লিকেশন চলার সময় নতুন Bean তৈরি বা ম্যানিপুলেট করতে হয়। Apache Commons BeanUtils এবং Reflection API ব্যবহার করে এই কাজগুলি সহজে করা যায়।
Dynamic Bean Creation
Dynamic Bean Creation করার উপায়
- Java Reflection API ব্যবহার করে ক্লাসের ইনস্ট্যান্স তৈরি।
- Apache Commons BeanUtils ব্যবহার করে প্রপার্টি সেট করা।
উদাহরণ: Reflection API দিয়ে Dynamic Bean Creation
import java.lang.reflect.Field;
public class DynamicBeanCreationExample {
public static void main(String[] args) {
try {
// Dynamically create an instance of Person class
Class<?> personClass = Class.forName("Person");
Object person = personClass.getDeclaredConstructor().newInstance();
// Set properties dynamically
Field nameField = personClass.getDeclaredField("name");
nameField.setAccessible(true); // Make private field accessible
nameField.set(person, "John Doe");
Field ageField = personClass.getDeclaredField("age");
ageField.setAccessible(true);
ageField.set(person, 30);
// Print properties
System.out.println("Name: " + nameField.get(person));
System.out.println("Age: " + ageField.get(person));
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
public Person() {}
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 দিয়ে Dynamic Bean Creation
import org.apache.commons.beanutils.BeanUtils;
import java.util.HashMap;
import java.util.Map;
public class DynamicBeanCreationWithBeanUtils {
public static void main(String[] args) {
try {
// Dynamically create an instance of Person
Person person = new Person();
// Create a map of properties
Map<String, Object> properties = new HashMap<>();
properties.put("name", "Jane Doe");
properties.put("age", 28);
// Populate the bean with properties
BeanUtils.populate(person, properties);
// Print properties
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
public Person() {}
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;
}
}আউটপুট:
Name: Jane Doe
Age: 28ব্যাখ্যা:
- BeanUtils.populate() মেথড ব্যবহার করে একটি Map-এর মান Person Bean-এ কপি করা হয়েছে।
- এটি ডাইনামিকভাবে নতুন প্রপার্টি সেট করার ক্ষেত্রে কার্যকর।
Runtime Property Management
Runtime-এ Properties Access এবং Manipulate করা
BeanUtils এবং PropertyUtils লাইব্রেরি আপনাকে Bean-এর প্রপার্টি অ্যাক্সেস এবং ম্যানিপুলেট করতে সহায়তা করে।
BeanUtils দিয়ে Properties Access এবং ম্যানিপুলেশন
import org.apache.commons.beanutils.BeanUtils;
public class RuntimePropertyManagementWithBeanUtils {
public static void main(String[] args) {
try {
// Create an instance of Person
Person person = new Person();
// Set properties dynamically
BeanUtils.setProperty(person, "name", "John");
BeanUtils.setProperty(person, "age", 35);
// Get properties dynamically
String name = BeanUtils.getProperty(person, "name");
String age = BeanUtils.getProperty(person, "age");
// Print properties
System.out.println("Name: " + name);
System.out.println("Age: " + age);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
public Person() {}
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;
}
}আউটপুট:
Name: John
Age: 35ব্যাখ্যা:
- BeanUtils.setProperty(): ডাইনামিকভাবে একটি প্রপার্টি সেট করা হয়েছে।
- BeanUtils.getProperty(): ডাইনামিকভাবে একটি প্রপার্টি পড়া হয়েছে।
PropertyUtils দিয়ে Properties Access এবং ম্যানিপুলেশন
import org.apache.commons.beanutils.PropertyUtils;
public class RuntimePropertyManagementWithPropertyUtils {
public static void main(String[] args) {
try {
// Create an instance of Person
Person person = new Person();
// Set properties dynamically
PropertyUtils.setProperty(person, "name", "Jane");
PropertyUtils.setProperty(person, "age", 40);
// Get properties dynamically
String name = (String) PropertyUtils.getProperty(person, "name");
int age = (int) PropertyUtils.getProperty(person, "age");
// Print properties
System.out.println("Name: " + name);
System.out.println("Age: " + age);
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
public Person() {}
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;
}
}আউটপুট:
Name: Jane
Age: 40ব্যাখ্যা:
- PropertyUtils.setProperty(): প্রপার্টি সেট করা হয়েছে।
- PropertyUtils.getProperty(): প্রপার্টি পড়া হয়েছে।
Nested Properties Runtime-এ Manage করা
Nested Bean এর প্রপার্টি Access এবং Manipulate করার জন্য PropertyUtils সেরা পছন্দ।
উদাহরণ:
import org.apache.commons.beanutils.PropertyUtils;
public class NestedPropertyManagement {
public static void main(String[] args) {
try {
// Create Person with Address
Address address = new Address("123 Main St", "City A");
Person person = new Person("John", 30, address);
// Access nested properties
String street = (String) PropertyUtils.getNestedProperty(person, "address.street");
System.out.println("Street: " + street);
// Modify nested properties
PropertyUtils.setNestedProperty(person, "address.street", "456 Elm St");
System.out.println("Updated Street: " + person.getAddress().getStreet());
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Address {
private String street;
private String city;
public Address(String street, String city) {
this.street = street;
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}আউটপুট:
Street: 123 Main St
Updated Street: 456 Elm Stসারাংশ
- Dynamic Bean Creation:
- Reflection API এবং BeanUtils ব্যবহার করে Dynamic Bean তৈরি করা যায়।
- Map থেকে Bean-এ ডেটা Populate করা BeanUtils দিয়ে সহজ।
- Runtime Property Management:
- BeanUtils এবং PropertyUtils দিয়ে প্রপার্টি ডাইনামিকভাবে সেট এবং পড়া যায়।
- Nested Properties Access এবং Manipulation করার জন্য PropertyUtils কার্যকর।
- আপনার কাজের প্রয়োজন অনুযায়ী BeanUtils বা PropertyUtils নির্বাচন করুন। BeanUtils টাইপ কনভার্সন সাপোর্ট করে, যেখানে PropertyUtils আসল টাইপ বজায় রাখে।
Content added || updated By
Read more