FactoryBean হল স্প্রিং ফ্রেমওয়ার্কের একটি ইন্টারফেস, যা একটি ফ্যাক্টরি প্যাটার্নের মতো কাজ করে। এটি সাধারণত একটি Bean তৈরি করার জন্য ব্যবহার করা হয়, বিশেষত যখন একটি Bean তৈরির প্রক্রিয়া জটিল বা কাস্টম লজিক প্রয়োজন হয়। স্প্রিং কনটেইনার সাধারণত Beans তৈরি করার জন্য @Component, @Bean অথবা XML কনফিগারেশন ব্যবহার করে, কিন্তু কখনো কখনো বিশেষ কাস্টম লজিকের মাধ্যমে Bean তৈরি করার জন্য FactoryBean ব্যবহার করা হয়।
FactoryBean ইন্টারফেস স্প্রিং কনটেইনারকে একটি Bean তৈরি করার জন্য কাস্টম লজিক প্রদান করতে সক্ষম করে এবং এটি শুধুমাত্র Bean তৈরি করার জন্য ব্যবহার করা হয়।
FactoryBean ইন্টারফেসের কাজ
স্প্রিং কনটেইনারে FactoryBean এর মাধ্যমে আপনার কাস্টম অবজেক্ট তৈরির জন্য একটি ফ্যাক্টরি মেথড তৈরি করা হয়। এটি Bean ডিফিনিশন তৈরি করার জন্য কনফিগারেশন ক্লাসে বা XML কনফিগারেশনে ব্যবহৃত হতে পারে।
FactoryBean ইন্টারফেসের মেথডসমূহ:
T getObject(): এটি Bean তৈরি করার জন্য কাস্টম লজিকের মাধ্যমে একটি অবজেক্ট রিটার্ন করে।Class<?> getObjectType(): এটি সেই অবজেক্টের টাইপ রিটার্ন করে যেটিgetObject()মেথড থেকে রিটার্ন হবে।boolean isSingleton(): এটি জানায়, Bean টি একক ইনস্ট্যান্স হবে কিনা (singleton)।
FactoryBean এর উদাহরণ
Step 1: FactoryBean Interface ইমপ্লিমেন্ট করা
ধরা যাক, আমরা একটি Car নামক অবজেক্ট তৈরি করতে চাই। এর জন্য আমরা একটি FactoryBean ইন্টারফেস তৈরি করব।
public class Car {
private String model;
public Car(String model) {
this.model = model;
}
public void drive() {
System.out.println("Driving a " + model);
}
}
public class CarFactoryBean implements FactoryBean<Car> {
private String model;
public CarFactoryBean(String model) {
this.model = model;
}
@Override
public Car getObject() throws Exception {
return new Car(model); // Custom logic to create a Car instance
}
@Override
public Class<?> getObjectType() {
return Car.class;
}
@Override
public boolean isSingleton() {
return true; // Return true if you want a singleton instance
}
}
এখানে, CarFactoryBean ফ্যাক্টরি প্যাটার্ন ব্যবহার করে Car অবজেক্ট তৈরি করছে। এটি getObject() মেথডের মাধ্যমে Car ইনস্ট্যান্স রিটার্ন করে এবং getObjectType() মেথডে Car টাইপটি রিটার্ন করে।
Step 2: Spring Configuration (Java-based)
এখন, আমরা স্প্রিং কনফিগারেশন ব্যবহার করে এই FactoryBean কে কনফিগার করব।
@Configuration
public class AppConfig {
@Bean
public CarFactoryBean carFactoryBean() {
return new CarFactoryBean("Tesla Model 3");
}
}
এখানে, carFactoryBean Bean-টি CarFactoryBean ক্লাসের একটি ইনস্ট্যান্স রিটার্ন করছে এবং "Tesla Model 3" মডেলটি ব্যবহার করা হয়েছে। স্প্রিং কনটেইনার এই ফ্যাক্টরি Bean-টিকে ব্যবহার করে Car ইনস্ট্যান্স তৈরি করবে।
Step 3: Main Class
এখন, স্প্রিং কনটেইনারের মধ্যে Car Bean রিট্রিভ করা হবে:
public class MainApp {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
// Retrieve the Car Bean created by the FactoryBean
Car car = (Car) context.getBean("carFactoryBean");
car.drive(); // Output: Driving a Tesla Model 3
context.close();
}
}
এখানে, Car Bean-টি CarFactoryBean ফ্যাক্টরি Bean-এর মাধ্যমে তৈরি করা হচ্ছে এবং স্প্রিং কনটেইনারে ইনস্ট্যান্স রিটার্ন করছে। এটি "Tesla Model 3" মডেল ব্যবহার করে Car অবজেক্ট তৈরি করছে এবং drive() মেথড কল করছে।
FactoryBean এর সুবিধা
- কাস্টম Bean নির্মাণ: স্প্রিং কনটেইনারে Bean তৈরি করার সময় যদি কাস্টম লজিক বা সঠিক কনফিগারেশন প্রয়োজন হয়, তবে
FactoryBeanব্যবহার করা হয়। - বিভিন্ন ধরণের Bean তৈরি: একাধিক ধরণের Bean তৈরির জন্য এটি ব্যবহার করা যায়, যেমন, সিনগলটন, প্রোটোটাইপ, ইত্যাদি।
- Complex Object Creation: যখন Bean তৈরির প্রক্রিয়া বেশ জটিল হয় এবং সাধারণভাবে
@Beanবা@Componentদিয়ে তা তৈরি করা সম্ভব নয়, তখনFactoryBeanসাহায্য করে। - Reusable Factory Logic: একবার ফ্যাক্টরি লজিক তৈরি করলে তা পুনরায় ব্যবহার করা যেতে পারে অন্য কোথাও, যেমন, একাধিক প্রোফাইল বা পরিবেশে।
FactoryBean কেন ব্যবহার করা হয়?
FactoryBean মূলত তখন ব্যবহৃত হয় যখন আপনাকে বিশেষ ধরনের Bean তৈরি করতে হয় যেটি সাধারণভাবে @Bean বা @Component অ্যানোটেশন দিয়ে তৈরি করা সম্ভব নয়। এর মাধ্যমে আপনি কমপ্লেক্স অবজেক্ট কনফিগারেশন, ডাইনামিক Bean সৃষ্টির প্রক্রিয়া সহজে পরিচালনা করতে পারেন এবং আপনার কোডকে আরও মডুলার, নমনীয় এবং রিইউজেবল করতে পারেন।
সারাংশ
FactoryBean হল একটি স্প্রিং ফিচার যা একটি ফ্যাক্টরি প্যাটার্ন ব্যবহার করে Bean তৈরি করতে সাহায্য করে। এটি বিশেষত তখন ব্যবহৃত হয় যখন Bean তৈরি করার প্রক্রিয়া জটিল বা কাস্টম লজিকের প্রয়োজন হয়। getObject() মেথডের মাধ্যমে আপনি কাস্টম লজিক ব্যবহার করে Bean তৈরি করতে পারেন এবং getObjectType() ও isSingleton() মেথডের মাধ্যমে তার টাইপ এবং সিঙ্গলটন প্রকৃতি নির্ধারণ করতে পারেন। FactoryBean ব্যবহারের মাধ্যমে আপনি Bean কনফিগারেশনের জটিলতা কমিয়ে আপনার অ্যাপ্লিকেশনকে আরও নমনীয় এবং রিইউজেবল করতে পারেন।