Nested Beans হল এমন Java Beans, যেখানে একটি Bean অন্য Bean ধারণ করে। এই ধরনের Beans-এ, প্রধান Bean (parent Bean) এর প্রপার্টি অন্য একটি Bean (child Bean) ধারণ করতে পারে। এটি ডেটার মডুলার কাঠামো তৈরি করতে সাহায্য করে, যেমন Person Bean-এ একটি Address Bean।
Nested Beans এর প্রপার্টি অ্যাক্সেস এবং ম্যানিপুলেশন করার জন্য Apache Commons BeanUtils বা PropertyUtils এর মতো লাইব্রেরি ব্যবহার করা হয়, যেগুলো Nested Properties সাপোর্ট করে।
1. Nested Bean এর প্রপার্টি অ্যাক্সেস এবং ম্যানিপুলেশন
উদাহরণ: Nested Bean ব্যবহার করে প্রপার্টি অ্যাক্সেস এবং ম্যানিপুলেশন
import org.apache.commons.beanutils.BeanUtils;
public class NestedBeanExample {
public static void main(String[] args) {
try {
// Create Address object (Nested Bean)
Address address = new Address("Street 123", "City A");
// Create Person object with nested Address object
Person person = new Person("John", 30, address);
// Access nested properties using BeanUtils
System.out.println("Before Manipulation:");
System.out.println("Name: " + BeanUtils.getProperty(person, "name")); // Output: John
System.out.println("Street: " + BeanUtils.getProperty(person, "address.street")); // Output: Street 123
System.out.println("City: " + BeanUtils.getProperty(person, "address.city")); // Output: City A
// Manipulate nested properties using BeanUtils
BeanUtils.setProperty(person, "address.street", "Street 456");
BeanUtils.setProperty(person, "address.city", "City B");
// Output manipulated nested properties
System.out.println("\nAfter Manipulation:");
System.out.println("Street: " + BeanUtils.getProperty(person, "address.street")); // Output: Street 456
System.out.println("City: " + BeanUtils.getProperty(person, "address.city")); // Output: City B
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Person {
private String name;
private int age;
private Address address;
public Person() {}
public Person(String name, int age, Address address) {
this.name = name;
this.age = age;
this.address = address;
}
// 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;
}
}ব্যাখ্যা:
- Nested Bean: এখানে
PersonBean এর মধ্যেAddressBean রয়েছে।address.streetএবংaddress.cityএকটি নেস্টেড প্রপার্টি। - BeanUtils.getProperty(): BeanUtils এর
getProperty()মেথড ব্যবহার করে, আমরাPersonBean এবংAddressBean এর প্রপার্টি অ্যাক্সেস করেছি। - BeanUtils.setProperty(): BeanUtils এর
setProperty()মেথড ব্যবহার করে nestedaddressএর প্রপার্টি manipulate (বদলানো) করেছি।
আউটপুট:
Before Manipulation:
Name: John
Street: Street 123
City: City A
After Manipulation:
Street: Street 456
City: City Bএখানে, nested প্রপার্টি যেমন address.street এবং address.city অ্যাক্সেস এবং ম্যানিপুলেট করা হয়েছে।
2. PropertyUtils ব্যবহার করে Nested Bean এর প্রপার্টি অ্যাক্সেস এবং Manipulation
PropertyUtils ক্লাসটি Apache Commons BeanUtils লাইব্রেরির একটি অংশ, যা BeanUtils এর মতো প্রপার্টি অ্যাক্সেস এবং ম্যানিপুলেশন করতে ব্যবহৃত হয়, তবে এটি আরও বেশি ফিচার এবং সহজ পদ্ধতিতে nested properties এর সাথে কাজ করতে সক্ষম।
উদাহরণ: PropertyUtils ব্যবহার করে Nested Bean-এর প্রপার্টি অ্যাক্সেস এবং Manipulation
import org.apache.commons.beanutils.PropertyUtils;
public class PropertyUtilsNestedExample {
public static void main(String[] args) {
try {
// Create Address object (Nested Bean)
Address address = new Address("Street 123", "City A");
// Create Person object with nested Address object
Person person = new Person("John", 30, address);
// Access nested properties using PropertyUtils
System.out.println("Before Manipulation:");
System.out.println("Name: " + PropertyUtils.getProperty(person, "name")); // Output: John
System.out.println("Street: " + PropertyUtils.getProperty(person, "address.street")); // Output: Street 123
System.out.println("City: " + PropertyUtils.getProperty(person, "address.city")); // Output: City A
// Manipulate nested properties using PropertyUtils
PropertyUtils.setProperty(person, "address.street", "Street 456");
PropertyUtils.setProperty(person, "address.city", "City B");
// Output manipulated nested properties
System.out.println("\nAfter Manipulation:");
System.out.println("Street: " + PropertyUtils.getProperty(person, "address.street")); // Output: Street 456
System.out.println("City: " + PropertyUtils.getProperty(person, "address.city")); // Output: City B
} catch (Exception e) {
e.printStackTrace();
}
}
}ব্যাখ্যা:
- PropertyUtils.getProperty():
PropertyUtils.getProperty()মেথড ব্যবহার করে nestedaddress.streetএবংaddress.cityপ্রপার্টি অ্যাক্সেস করা হয়েছে। - PropertyUtils.setProperty():
PropertyUtils.setProperty()মেথড ব্যবহার করে nested প্রপার্টি ম্যানিপুলেট করা হয়েছে।
আউটপুট:
Before Manipulation:
Name: John
Street: Street 123
City: City A
After Manipulation:
Street: Street 456
City: City B3. Nested Bean Access এবং Manipulation এর কিছু গুরুত্বপূর্ণ পদ্ধতি
BeanUtils.copyProperties(): এক Bean থেকে অন্য Bean-এ প্রপার্টি কপি করার জন্য।PropertyUtils.getProperty(): Bean বা nested Bean-এর প্রপার্টি অ্যাক্সেস করতে।PropertyUtils.setProperty(): Bean বা nested Bean-এর প্রপার্টি সেট করতে।
4. Nested Bean এর সাথে অন্যান্য ফ্রেমওয়ার্কের সমন্বয়
- Spring Framework: Spring IoC (Inversion of Control) কন্টেইনারে nested beans কাজ করে খুবই সহজে। Spring Bean validation এবং dependency injection এর সাথে আপনি nested beans ব্যবহার করতে পারবেন।
- Hibernate: Hibernate ORM এ nested properties কাস্টম entity Bean হিসাবে ব্যবহৃত হয়, যা ডাটাবেস টেবিলের সাথে মেপ করা হয়।
সারাংশ
- Nested Beans হল Java Beans যেখানে একটি Bean অন্য Bean ধারণ করে। এটি Java Beans এর মধ্যে ডেটার গঠন এবং মডুলারিটি নিশ্চিত করে।
- BeanUtils এবং PropertyUtils এর মাধ্যমে আপনি nested properties অ্যাক্সেস এবং ম্যানিপুলেট করতে পারেন।
BeanUtils.getProperty()এবংPropertyUtils.getProperty()এর মাধ্যমে nested Bean-এর প্রপার্টি অ্যাক্সেস করা যায় এবংsetProperty()মেথডের মাধ্যমে nested properties পরিবর্তন বা ম্যানিপুলেট করা সম্ভব।
Read more