Apache Commons BeanUtils লাইব্রেরির দুটি গুরুত্বপূর্ণ মেথড হলো populate() এবং **setProperty()**। এই দুটি মেথড Java Bean-এর প্রপার্টি সেট করার জন্য ব্যবহৃত হয়। তবে তাদের কাজের ধরন এবং ব্যবহারের পদ্ধতি কিছুটা ভিন্ন। চলুন বিস্তারিতভাবে এই দুটি মেথডের ব্যবহার এবং তাদের পার্থক্য দেখি।
১. populate() মেথড
populate() মেথড একটি Map অবজেক্ট ব্যবহার করে একটি Java Bean-এর প্রপার্টি সেট করে। Map-এর key প্রপার্টির নাম এবং value সেই প্রপার্টির মান নির্ধারণ করে।
উদাহরণ:
import org.apache.commons.beanutils.BeanUtils;
import java.util.HashMap;
import java.util.Map;
public class PopulateExample {
public static void main(String[] args) {
try {
// Create a Person object
Person person = new Person();
// Create a map with property values
Map<String, String> propertyMap = new HashMap<>();
propertyMap.put("name", "John");
propertyMap.put("age", "30");
// Populate the properties of the Person object
BeanUtils.populate(person, propertyMap);
// 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();
}
}
}
class Person {
private String name;
private int age;
// Getters and Setters
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;
}
}ব্যাখ্যা:
populate()মেথড Map-এর key-value ব্যবহার করেPersonঅবজেক্টেরnameএবংageপ্রপার্টি সেট করেছে।- Map-এর key (e.g.,
name,age) Java Bean এর প্রপার্টির নামের সাথে মিলে যায়। - টাইপ কনভার্সন স্বয়ংক্রিয়ভাবে হয়েছে, যেমন Map-এ
ageএকটি String, কিন্তু এটি Integer-এ কনভার্ট করা হয়েছে।
২. setProperty() মেথড
setProperty() মেথড একটি নির্দিষ্ট প্রপার্টির মান সেট করতে ব্যবহৃত হয়। এটি সরাসরি একটি প্রপার্টির নাম এবং মান গ্রহণ করে এবং সেই প্রপার্টির মান আপডেট করে।
উদাহরণ:
import org.apache.commons.beanutils.BeanUtils;
public class SetPropertyExample {
public static void main(String[] args) {
try {
// Create a Person object
Person person = new Person();
// Set properties individually
BeanUtils.setProperty(person, "name", "Alice");
BeanUtils.setProperty(person, "age", "25");
// Output the set properties
System.out.println("Name: " + person.getName()); // Output: Alice
System.out.println("Age: " + person.getAge()); // Output: 25
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
// Getters and Setters
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;
}
}ব্যাখ্যা:
setProperty()সরাসরি একটি নির্দিষ্ট প্রপার্টির নাম এবং মান নেয় এবং সেই মান সেট করে।- এখানে
nameএবংageপ্রপার্টির জন্য পৃথকভাবে মান সেট করা হয়েছে। - টাইপ কনভার্সন স্বয়ংক্রিয়ভাবে হয়েছে, যেমন
ageএকটি String থেকে Integer-এ কনভার্ট হয়েছে।
populate() এবং setProperty() এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | populate() | setProperty() |
|---|---|---|
| কাজের ধরন | একটি Map ব্যবহার করে একাধিক প্রপার্টি সেট করে। | একটি নির্দিষ্ট প্রপার্টি সেট করে। |
| ইনপুট | Map অবজেক্ট (key-value পেয়ার)। | প্রপার্টির নাম এবং মান সরাসরি ইনপুট নেয়। |
| একাধিক প্রপার্টি সেট করা | একসাথে একাধিক প্রপার্টি সেট করতে সক্ষম। | একবারে শুধুমাত্র একটি প্রপার্টি সেট করা যায়। |
| টাইপ কনভার্সন | স্বয়ংক্রিয়ভাবে টাইপ কনভার্সন করে। | স্বয়ংক্রিয়ভাবে টাইপ কনভার্সন করে। |
| ব্যবহার | যখন একাধিক প্রপার্টি সেট করতে হয়। | যখন নির্দিষ্ট কোনো প্রপার্টি সেট করতে হয়। |
Complex Bean এ populate() এবং setProperty() ব্যবহার
উদাহরণ: Nested Properties
import org.apache.commons.beanutils.BeanUtils;
import java.util.HashMap;
import java.util.Map;
public class NestedPropertiesExample {
public static void main(String[] args) {
try {
// Create a Person object with nested Address
Person person = new Person();
person.setAddress(new Address());
// Using populate() to set nested properties
Map<String, String> propertyMap = new HashMap<>();
propertyMap.put("name", "John");
propertyMap.put("age", "30");
propertyMap.put("address.street", "Main Street");
propertyMap.put("address.city", "City A");
BeanUtils.populate(person, propertyMap);
// Output nested properties
System.out.println("Name: " + person.getName()); // Output: John
System.out.println("Age: " + person.getAge()); // Output: 30
System.out.println("Street: " + person.getAddress().getStreet()); // Output: Main Street
System.out.println("City: " + person.getAddress().getCity()); // Output: City A
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
private Address address;
// Getters and Setters
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;
// Getters and Setters
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;
}
}ব্যাখ্যা:
- Nested Properties: Map-এ
address.streetএবংaddress.cityএর মাধ্যমে nested properties সেট করা হয়েছে। populate(): Map ব্যবহার করে সমস্ত প্রপার্টি একবারে সেট করা হয়েছে।setProperty(): আলাদাভাবেsetProperty()ব্যবহার করেও একই কাজ করা যেত।
সারাংশ
populate()একটি Map ব্যবহার করে একাধিক প্রপার্টি একবারে সেট করতে পারদর্শী। এটি বিশেষভাবে উপযোগী যখন অনেক প্রপার্টি আপডেট করতে হয়।setProperty()একটি নির্দিষ্ট প্রপার্টি সেট করতে কার্যকর। এটি সরাসরি প্রপার্টির নাম এবং মান ইনপুট নিয়ে কাজ করে।- Nested Properties পরিচালনায় উভয় মেথড কার্যকর, তবে
populate()জটিল nested প্রপার্টি হ্যান্ডলিংয়ে বেশি সুবিধাজনক।
Read more