Custom Converters হল এমন ক্লাস বা ফাংশন, যা একটি ডেটা টাইপ থেকে আরেকটি ডেটা টাইপে রূপান্তর করতে ব্যবহৃত হয়। এটি বিশেষভাবে প্রয়োজন হয় যখন আপনি আপনার প্রয়োজন অনুযায়ী ডেটা কনভার্ট করতে চান যা ডিফল্ট কনভার্সন সাপোর্ট করে না। Apache Commons BeanUtils এবং Spring Framework উভয়ই কাস্টম কনভার্টার তৈরির সুবিধা দেয়।
Custom Converters Apache Commons BeanUtils এ
Apache Commons BeanUtils লাইব্রেরি ব্যবহার করে কাস্টম কনভার্টার তৈরি করা যায়, যেখানে Converter ইন্টারফেস ব্যবহার করে টাইপ কনভার্সন কাস্টমাইজ করা হয়।
Custom Converter তৈরি এবং ব্যবহার উদাহরণ
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
public class CustomConverterExample {
public static void main(String[] args) {
try {
// Register the custom converter
ConvertUtils.register(new StringToAddressConverter(), Address.class);
// Source data
String addressString = "123 Main St, City A";
// Target object
Person person = new Person();
// Set the address property using BeanUtils (with custom converter)
BeanUtils.setProperty(person, "address", addressString);
// Output the converted Address object
System.out.println("Street: " + person.getAddress().getStreet());
System.out.println("City: " + person.getAddress().getCity());
} catch (Exception e) {
e.printStackTrace();
}
}
}
// Custom Converter: String to Address
class StringToAddressConverter implements Converter {
@Override
public Object convert(Class type, Object value) {
if (value instanceof String) {
String[] parts = ((String) value).split(", ");
return new Address(parts[0], parts[1]);
}
return null;
}
}
// Address class
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 class
class Person {
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}ব্যাখ্যা:
- Custom Converter তৈরি:
StringToAddressConverterক্লাসটি তৈরি করা হয়েছে, যাConverterইন্টারফেস ইমপ্লিমেন্ট করে। - Converter রেজিস্ট্রেশন:
ConvertUtils.register()মেথড ব্যবহার করে কাস্টম কনভার্টার রেজিস্টার করা হয়েছে। - BeanUtils.setProperty(): কনভার্টার ব্যবহার করে
StringথেকেAddressটাইপে কনভার্ট করেPersonক্লাসে সেট করা হয়েছে।
Custom Converters Spring Framework এ
Spring Framework-এ কাস্টম কনভার্টার তৈরি করতে Converter ইন্টারফেস ব্যবহার করা হয়, যা org.springframework.core.convert.converter.Converter প্যাকেজের অংশ।
Custom Converter তৈরি এবং ব্যবহার উদাহরণ
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.support.DefaultConversionService;
public class SpringCustomConverterExample {
public static void main(String[] args) {
// Create application context
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// Get the conversion service
DefaultConversionService conversionService = context.getBean(DefaultConversionService.class);
// Convert String to Address using custom converter
String addressString = "456 Elm St, City B";
Address address = conversionService.convert(addressString, Address.class);
// Output the converted Address object
System.out.println("Street: " + address.getStreet());
System.out.println("City: " + address.getCity());
context.close();
}
}
// Custom Converter: String to Address
class StringToAddressConverter implements Converter<String, Address> {
@Override
public Address convert(String source) {
String[] parts = source.split(", ");
return new Address(parts[0], parts[1]);
}
}
// Address class
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;
}
}
// Spring Configuration
@Configuration
class AppConfig {
@Bean
public DefaultConversionService conversionService() {
DefaultConversionService conversionService = new DefaultConversionService();
conversionService.addConverter(new StringToAddressConverter());
return conversionService;
}
}ব্যাখ্যা:
- Custom Converter তৈরি:
StringToAddressConverterএকটি কনভার্টার যাStringথেকেAddressটাইপে রূপান্তর করে। - DefaultConversionService: Spring এর ডিফল্ট কনভার্সন সার্ভিস ব্যবহার করা হয়েছে, যা কাস্টম কনভার্টার রেজিস্টার করার জন্য ব্যবহৃত হয়েছে।
- convert() মেথড: Spring এর কনভার্সন সার্ভিস ব্যবহার করে
StringথেকেAddressকনভার্ট করা হয়েছে।
Custom Converters এর সুবিধা
- কাস্টম টাইপ সাপোর্ট: ডিফল্টভাবে সমর্থিত না এমন টাইপগুলোর জন্য কনভার্সন তৈরি করা।
- পুনঃব্যবহারযোগ্যতা (Reusability): একবার তৈরি করলে কাস্টম কনভার্টার বারবার ব্যবহার করা যায়।
- সারলীকরণ (Simplification): জটিল ডেটা টাইপ ম্যানিপুলেশন সহজ করা।
- Spring Integration: Spring Framework-এর কনভার্সন সার্ভিসে কাস্টম কনভার্টার সহজেই যোগ করা যায়।
Custom Converters BeanUtils বনাম Spring Framework এ
| বৈশিষ্ট্য | BeanUtils Custom Converter | Spring Custom Converter |
|---|---|---|
| ইন্টারফেস | org.apache.commons.beanutils.Converter | org.springframework.core.convert.converter.Converter |
| টাইপ কনভার্সন সাপোর্ট | টাইপ কনভার্সন এবং Bean ম্যানিপুলেশন | টাইপ কনভার্সন এবং Spring Context Integration |
| রেজিস্ট্রেশন | ConvertUtils.register() ব্যবহার করা হয়। | DefaultConversionService.addConverter() ব্যবহার করা হয়। |
| Spring Integration | সরাসরি সমর্থিত নয়। | Spring Bean এবং Context-এর সাথে গভীরভাবে ইন্টিগ্রেটেড। |
সারাংশ
- BeanUtils-এ কাস্টম কনভার্টার তৈরি সহজ এবং ডায়নামিক টাইপ কনভার্সনের জন্য কার্যকর।
- Spring Framework-এ কাস্টম কনভার্টার Spring Context এবং Bean Configuration-এর সাথে গভীরভাবে ইন্টিগ্রেট করা যায়।
- আপনার প্রকল্পের ধরন অনুযায়ী BeanUtils বা Spring Framework ব্যবহার করুন। Spring বেশি শক্তিশালী এবং বৃহৎ অ্যাপ্লিকেশনের জন্য বেশি কার্যকর।
Read more