Nested Properties হল এমন প্রপার্টি যা একটি Java Bean-এর মধ্যে অন্য Java Bean থাকে। সাধারণত, এই ধরনের প্রপার্টি কপি করা বেশ কঠিন হতে পারে, তবে Apache Commons BeanUtils বা PropertyUtils এর মাধ্যমে সহজেই nested properties কপি করা সম্ভব।
নেস্টেড প্রপার্টি কপি করার সময়, একটি Java Bean-এ থাকা কোনো অবজেক্টের (যেমন, Address বা ContactInfo) প্রপার্টি অন্য Java Bean-এর মধ্যে কপি করা হয়। চলুন দেখি কিভাবে BeanUtils এবং PropertyUtils ব্যবহার করে nested properties কপি করা যায়।
1. BeanUtils ব্যবহার করে Nested Properties কপি করা
BeanUtils ব্যবহার করে আপনি সহজেই একটি Java Bean-এর মধ্যে nested properties কপি করতে পারেন। এটি nested property names ধারণ করে, যা একাধিক স্তরের অবজেক্টের প্রপার্টি অ্যাক্সেস এবং কপি করতে সহায়তা করে।
উদাহরণ: BeanUtils দিয়ে Nested Property কপি করা
import org.apache.commons.beanutils.BeanUtils;
public class NestedPropertyExample {
public static void main(String[] args) {
try {
// Create Address object
Address address1 = new Address("Street 123", "City A");
// Create Person object with nested Address object
Person person1 = new Person("John", 30, address1);
// Target Person object
Person person2 = new Person();
// Copy properties including nested Address
BeanUtils.copyProperties(person2, person1);
// Output copied properties including nested Address
System.out.println("Name: " + person2.getName()); // Output: John
System.out.println("Age: " + person2.getAge()); // Output: 30
System.out.println("Street: " + person2.getAddress().getStreet()); // Output: Street 123
System.out.println("City: " + person2.getAddress().getCity()); // Output: City A
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
private Address address;
public Person(String name, int age, Address address) {
this.name = name;
this.age = age;
this.address = address;
}
public Person() {}
// 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;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
class Address {
private String street;
private String city;
public Address(String street, String city) {
this.street = street;
this.city = city;
}
// Getter and Setter Methods
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;
}
}ব্যাখ্যা:
- BeanUtils.copyProperties() মেথডটি
person1থেকেperson2-এ সমস্ত প্রপার্টি কপি করেছে, যার মধ্যে Address নামক একটি নেস্টেড প্রপার্টি আছে। - এখানে address.street এবং address.city প্রপার্টিগুলো
person1থেকেperson2তে কপি করা হয়েছে।
BeanUtils স্বয়ংক্রিয়ভাবে নেস্টেড প্রপার্টি কপি করতে সক্ষম, যতক্ষণ না প্রপার্টির নাম সঠিকভাবে দেওয়া হয়।
2. PropertyUtils ব্যবহার করে Nested Properties কপি করা
PropertyUtils একটি JavaBean-এর মধ্যে nested properties অ্যাক্সেস এবং ম্যানিপুলেট করতে ব্যবহৃত হয়। এটি getter/setter মেথডের মাধ্যমে কাজ করে এবং nested properties এক্সেস করতে সহজ হয়।
উদাহরণ: PropertyUtils দিয়ে Nested Property কপি করা
import org.apache.commons.beanutils.PropertyUtils;
public class PropertyUtilsNestedExample {
public static void main(String[] args) {
try {
// Create Address object
Address address1 = new Address("Street 123", "City A");
// Create Person object with nested Address object
Person person1 = new Person("John", 30, address1);
// Target Person object
Person person2 = new Person();
// Copy properties using PropertyUtils (Nested property copying)
PropertyUtils.copyProperties(person2, person1);
// Output copied properties including nested Address
System.out.println("Name: " + person2.getName()); // Output: John
System.out.println("Age: " + person2.getAge()); // Output: 30
System.out.println("Street: " + person2.getAddress().getStreet()); // Output: Street 123
System.out.println("City: " + person2.getAddress().getCity()); // Output: City A
} catch (Exception e) {
e.printStackTrace();
}
}
}ব্যাখ্যা:
- PropertyUtils.copyProperties() মেথড ব্যবহার করে
person1থেকেperson2তে প্রপার্টি কপি করা হয়েছে, যার মধ্যে Address নামক নেস্টেড প্রপার্টি রয়েছে। - এখানে
address.streetএবংaddress.cityকপি করা হয়েছে।
এটি BeanUtils এর মতো nested properties কপি করার জন্য উপযুক্ত, তবে এটি সাধারণভাবে শুধুমাত্র getter/setter মেথডের মাধ্যমে কাজ করে।
BeanUtils এবং PropertyUtils এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | BeanUtils | PropertyUtils |
|---|---|---|
| নেস্টেড প্রপার্টি কপি | স্বয়ংক্রিয়ভাবে কপি করে, সহজ এবং দ্রুত | getter/setter মেথড ব্যবহার করে কপি করে |
| ব্যবহার | ডেটা কপি ও টাইপ কনভার্সনের জন্য ব্যবহৃত | প্রপার্টি এক্সেস এবং nested properties কপি করার জন্য ব্যবহৃত |
| টাইপ কনভার্সন | সাপোর্ট করে | সাপোর্ট করে না |
| কপি করার সুবিধা | প্রপার্টি কপি দ্রুত এবং সহজ | বেশি কাস্টমাইজেশন এবং কোড কন্ট্রোল প্রদান করে |
সারাংশ
- BeanUtils এবং PropertyUtils দুটি লাইব্রেরি Java Beans এবং অন্যান্য objects-এর মধ্যে ডেটা কপি এবং ম্যানিপুলেশন করার জন্য ব্যবহৃত হয়।
- BeanUtils স্বয়ংক্রিয়ভাবে nested properties কপি করতে পারে এবং টাইপ কনভার্সন সাপোর্ট করে।
- PropertyUtils সাধারণত getter/setter মেথড ব্যবহার করে nested properties অ্যাক্সেস এবং কপি করার জন্য ব্যবহৃত হয়।
- উভয় লাইব্রেরি নির্দিষ্ট পরিস্থিতিতে উপযোগী, তবে BeanUtils সহজ এবং দ্রুত ডেটা কপি করতে সহায়ক। PropertyUtils এ বেশি কাস্টমাইজেশন এবং নিয়ন্ত্রণ পাওয়া যায়।
BeanUtils এবং PropertyUtils উভয়ই powerful tools, যা Java Beans-এর মধ্যে nested properties কপি এবং ম্যানিপুলেশন সহজ করে তোলে।
Read more