Apache Commons BeanUtils লাইব্রেরির অংশ হিসাবে PropertyUtils একটি বিশেষ টুল যা Java Bean বা অন্যান্য objects-এর প্রপার্টি সহজে এবং ডাইরেক্টভাবে ম্যানিপুলেট করতে সহায়তা করে। এটি Java Bean-এর প্রপার্টি পড়া এবং পরিবর্তন করার জন্য ব্যবহৃত হয়, যা Java Reflection API-এর উপর ভিত্তি করে কাজ করে।
PropertyUtils, BeanUtils এর মতোই, Java Beans-এর মধ্যে ডেটা পরিচালনার জন্য একটি শক্তিশালী টুল, তবে এটি সরাসরি এবং অনেক সময় আরও কার্যকরীভাবে প্রপার্টি অ্যাক্সেস করার সুযোগ প্রদান করে।
PropertyUtils এর ফিচারসমূহ:
- প্রপার্টি রিড এবং সেট:
PropertyUtils ব্যবহার করে Java Bean-এর মধ্যে কোনো প্রপার্টি রিড এবং সেট করা যায়। এটি getter/setter মেথড ব্যবহারের তুলনায় আরও সহজ এবং কম কোডের মাধ্যমে কাজ করে। - প্রপার্টির নাম স্ট্রিং হিসেবে ব্যবহার:
আপনি প্রপার্টির নাম স্ট্রিং হিসেবে দিতে পারেন, যা Reflection এর মাধ্যমে সেই প্রপার্টি অ্যাক্সেস করতে সহায়তা করে। - নেস্টেড প্রপার্টি সাপোর্ট:
এটি নেস্টেড প্রপার্টি (যেমন একটি Bean-এর মধ্যে অন্য Bean) অ্যাক্সেস করতে পারে। - পাবলিক এবং প্রাইভেট প্রপার্টি অ্যাক্সেস:
এটি পাবলিক এবং প্রাইভেট প্রপার্টি অ্যাক্সেস করার জন্য ব্যবহৃত হতে পারে।
PropertyUtils ব্যবহার করার উদাহরণ
১. PropertyUtils ব্যবহার করে প্রপার্টি রিড এবং সেট করা
ধরা যাক, আমাদের একটি Person Bean আছে এবং আমরা PropertyUtils ব্যবহার করে এর প্রপার্টি রিড এবং সেট করতে চাই।
import org.apache.commons.beanutils.PropertyUtils;
public class PropertyUtilsExample {
public static void main(String[] args) {
try {
// Create a Person object
Person person = new Person("John", 30);
// Get property using PropertyUtils
String name = (String) PropertyUtils.getProperty(person, "name");
int age = (int) PropertyUtils.getProperty(person, "age");
// Print the values
System.out.println("Name: " + name); // Output: John
System.out.println("Age: " + age); // Output: 30
// Set new value for the 'age' property using PropertyUtils
PropertyUtils.setProperty(person, "age", 35);
// Verify the updated value
System.out.println("Updated Age: " + person.getAge()); // Output: 35
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
}এখানে, আমরা PropertyUtils.getProperty() মেথড দিয়ে Person ক্লাসের name এবং age প্রপার্টি রিড করেছি এবং PropertyUtils.setProperty() মেথড দিয়ে age প্রপার্টির মান আপডেট করেছি।
২. নেস্টেড প্রপার্টি ম্যানিপুলেশন (Nested Property Manipulation)
PropertyUtils নেস্টেড প্রপার্টির অ্যাক্সেস এবং ম্যানিপুলেশনেও সহায়তা করে। ধরুন, আমাদের Person ক্লাসে একটি Address নামক নেস্টেড object রয়েছে, এবং আমরা Address এর প্রপার্টি রিড এবং সেট করতে চাই।
import org.apache.commons.beanutils.PropertyUtils;
public class NestedPropertyExample {
public static void main(String[] args) {
try {
// Create an Address object
Address address = new Address("Street 123", "City A");
// Create a Person object with nested Address
Person person = new Person("John", 30, address);
// Get nested property using PropertyUtils
String street = (String) PropertyUtils.getProperty(person, "address.street");
String city = (String) PropertyUtils.getProperty(person, "address.city");
// Print the nested properties
System.out.println("Street: " + street); // Output: Street 123
System.out.println("City: " + city); // Output: City A
// Set new value for the 'street' property using PropertyUtils
PropertyUtils.setProperty(person, "address.street", "Street 456");
// Verify the updated nested property
System.out.println("Updated Street: " + person.getAddress().getStreet()); // Output: Street 456
} 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 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;
}
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;
}
}এখানে, আমরা Person ক্লাসের মধ্যে থাকা Address নামক নেস্টেড object এর street এবং city প্রপার্টি অ্যাক্সেস করেছি এবং PropertyUtils ব্যবহার করে সেগুলোর মান রিড এবং সেট করেছি।
PropertyUtils এর সুবিধা:
- ডাইনামিক প্রপার্টি অ্যাক্সেস: PropertyUtils এর মাধ্যমে আপনি স্ট্রিং হিসেবে প্রপার্টির নাম ব্যবহার করে ডাইনামিকভাবে Java Bean এর প্রপার্টি অ্যাক্সেস করতে পারেন।
- নেস্টেড প্রপার্টি সাপোর্ট: এটি nested properties যেমন
address.streetবাperson.nameসহজেই অ্যাক্সেস এবং ম্যানিপুলেট করতে সহায়তা করে। - ফ্লেক্সিবল এবং সিম্পল API: PropertyUtils ব্যবহার করা সহজ এবং এটি reflection-এর মাধ্যমে কাজ করে, তাই কোডের অপ্রত্যাশিত ত্রুটি কমাতে সহায়তা করে।
সারাংশ
PropertyUtils Apache Commons BeanUtils লাইব্রেরির একটি গুরুত্বপূর্ণ অংশ, যা Java Bean এর প্রপার্টি রিড এবং সেট করার জন্য ব্যবহৃত হয়। এটি ডাইনামিক প্রপার্টি অ্যাক্সেস, নেস্টেড প্রপার্টি সাপোর্ট এবং সিম্পল API প্রদান করে। এটি BeanUtils এর তুলনায় আরও ফ্লেক্সিবল এবং কার্যকরীভাবে প্রপার্টি ম্যানিপুলেট করার সুযোগ প্রদান করে।
Read more