Spring Framework-এ Collection Injection হল একটি অত্যন্ত কার্যকরী পদ্ধতি যার মাধ্যমে আপনি একটি Bean-এর মধ্যে একটি Collection (যেমন, List, Set, Map ইত্যাদি) ইনজেক্ট করতে পারেন। এটি Dependency Injection (DI) ব্যবহারের একটি বিশেষ ক্ষেত্র যেখানে একটি Bean একাধিক মান বা উপাদান ধারণ করে এবং সেই উপাদানগুলো অন্য Bean দ্বারা ইনজেক্ট করা হয়।
Spring-এ Collection Injection এর মাধ্যমে আপনি একটি Bean-এর মধ্যে একটি Collection (List, Set, বা Map) এর ডিপেনডেন্সি ইনজেক্ট করতে পারেন, যা সাধারণভাবে Spring Container থেকে সরবরাহ করা হয়।
Collection Injection: ব্যবহার
Spring Framework এ Collection Injection সাধারণত @Autowired অ্যানোটেশন ব্যবহার করে করা হয়। এটি ইনজেক্ট করা হয় List, Set, বা Map হিসেবে। এখানে আমরা কিছু সাধারণ উদাহরণ দেখবো।
1. List Injection (List দ্বারা Dependency Injection)
যখন আপনি একাধিক মান বা Bean ইনজেক্ট করতে চান, তখন List একটি আদর্শ কন্টেইনার হতে পারে।
উদাহরণ: List Injection
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class UserService {
private List<String> users;
@Autowired
public void setUsers(List<String> users) {
this.users = users;
}
public void showUsers() {
for (String user : users) {
System.out.println(user);
}
}
}
applicationContext.xml বা Java Config-এ List-এর উপাদানগুলি কনফিগার করতে হবে।
applicationContext.xml:
<bean id="userService" class="com.example.UserService">
<property name="users">
<list>
<value>John</value>
<value>Jane</value>
<value>Bob</value>
</list>
</property>
</bean>
এখানে, UserService Bean-এ List ইনজেক্ট করা হয়েছে এবং এটি showUsers() মেথডের মাধ্যমে আউটপুট দেখাবে।
2. Set Injection (Set দ্বারা Dependency Injection)
Set ব্যবহার করা হয় যখন ডুপ্লিকেট মানের অনুমতি না দিয়ে বিভিন্ন ইউনিক উপাদান ইনজেক্ট করতে হয়।
উদাহরণ: Set Injection
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Set;
@Component
public class UserService {
private Set<String> users;
@Autowired
public void setUsers(Set<String> users) {
this.users = users;
}
public void showUsers() {
for (String user : users) {
System.out.println(user);
}
}
}
applicationContext.xml:
<bean id="userService" class="com.example.UserService">
<property name="users">
<set>
<value>John</value>
<value>Jane</value>
<value>Bob</value>
</set>
</property>
</bean>
এখানে Set ব্যবহার করা হয়েছে যেখানে John, Jane, এবং Bob নামক ইউনিক ভ্যালুগুলি ইনজেক্ট করা হয়েছে।
3. Map Injection (Map দ্বারা Dependency Injection)
Map ব্যবহার করা হয় যখন ডিপেনডেন্সি ইনজেক্ট করার সময় key-value pair-এর মাধ্যমে উপাদানগুলো ইনজেক্ট করতে হয়।
উদাহরণ: Map Injection
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class UserService {
private Map<String, String> users;
@Autowired
public void setUsers(Map<String, String> users) {
this.users = users;
}
public void showUsers() {
for (Map.Entry<String, String> entry : users.entrySet()) {
System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}
}
}
applicationContext.xml:
<bean id="userService" class="com.example.UserService">
<property name="users">
<map>
<entry key="user1" value="John"/>
<entry key="user2" value="Jane"/>
<entry key="user3" value="Bob"/>
</map>
</property>
</bean>
এখানে Map ব্যবহার করা হয়েছে এবং প্রতিটি key-value pair এর মাধ্যমে মান ইনজেক্ট করা হয়েছে। showUsers() মেথডে Map এর key-value pair গুলি আউটপুট করা হয়।
4. @Autowired with Collection of Beans
Spring-এ আপনি একাধিক Bean-ও ইনজেক্ট করতে পারেন যেগুলি একই ইন্টারফেস বা সুপার ক্লাসের ইমপ্লিমেন্টেশন। Spring এই Bean গুলি অটোমেটিক্যালি একটি Collection হিসেবে ইনজেক্ট করে।
উদাহরণ: Collection of Beans Injection
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class UserService {
private List<PaymentService> paymentServices;
@Autowired
public void setPaymentServices(List<PaymentService> paymentServices) {
this.paymentServices = paymentServices;
}
public void processPayments() {
for (PaymentService service : paymentServices) {
service.processPayment();
}
}
}
PaymentService Bean ইন্টারফেসের ইমপ্লিমেন্টেশন হিসাবে CreditCardPaymentService এবং PaypalPaymentService এর মতো Beans থাকবে।
import org.springframework.stereotype.Component;
@Component
public class CreditCardPaymentService implements PaymentService {
@Override
public void processPayment() {
System.out.println("Processing Credit Card Payment");
}
}
@Component
public class PaypalPaymentService implements PaymentService {
@Override
public void processPayment() {
System.out.println("Processing PayPal Payment");
}
}
Spring Container দুইটি PaymentService Beans ইনজেক্ট করবে এবং UserService ক্লাসে paymentServices List-এ এই Beans গুলি ইনজেক্ট হবে।
Conclusion
Spring Framework-এ Collection Injection একটি শক্তিশালী পদ্ধতি যা আপনাকে List, Set, এবং Map এর মতো কন্টেইনারের মাধ্যমে একাধিক Bean বা ডিপেনডেন্সি ইনজেক্ট করতে সহায়তা করে। @Autowired অ্যানোটেশন এবং Spring Bean কনফিগারেশন (XML বা Java Config) ব্যবহার করে Collection Injection সহজে করা যায়। এটি Spring Beans-এর মধ্যে ডিপেনডেন্সি পরিচালনাকে আরও নমনীয় এবং পরিষ্কার করে তোলে।
Read more