List, Set, এবং Map এর মধ্যে DI পরিচালনা

Spring DI এবং Collection Injection - স্প্রিং ডিপেনডেন্সি ইনজেকশন (ডিআই) (Spring Dependency Injection) - Java Technologies

276

স্প্রিং ডিপেনডেন্সি ইনজেকশন (Spring Dependency Injection বা DI) আপনাকে JavaBeans-এর মধ্যে ডিপেনডেন্সি ইনজেক্ট করার একটি শক্তিশালী প্রক্রিয়া প্রদান করে। যখন আপনার ডিপেনডেন্সি হিসেবে List, Set, বা Map ব্যবহার করতে হয়, তখন স্প্রিং কনটেইনার এই কালেকশনগুলির মধ্যে একাধিক অবজেক্ট ইনজেক্ট করার জন্য সহায়ক ব্যবস্থা প্রদান করে। স্প্রিং আপনাকে Collection Injection পরিচালনার জন্য বিভিন্ন উপায় প্রদান করে, যার মাধ্যমে একাধিক ভ্যালু বা অবজেক্ট ইনজেক্ট করা যায়।

এখানে আমরা List, Set, এবং Map-এর মাধ্যমে ডিপেনডেন্সি ইনজেকশন পরিচালনার উপায়গুলি আলোচনা করব।


List, Set, এবং Map এর মাধ্যমে DI পরিচালনা

স্প্রিং কনটেইনার List, Set, এবং Map ডিপেনডেন্সি ইনজেকশন পরিচালনা করার জন্য বিভিন্ন উপায় ব্যবহার করতে পারে। এগুলি সাধারণত অ্যানোটেশন বা XML কনফিগারেশন ফাইলে ব্যবহার করা হয়।


১. List এর মাধ্যমে DI পরিচালনা

List সাধারণত অর্ডারড (ordered) কালেকশন হিসেবে ব্যবহৃত হয়, যেখানে আপনি ইনজেক্ট করা অবজেক্টগুলির নির্দিষ্ট ক্রম বজায় রাখতে পারেন।

উদাহরণ:

ধরা যাক, আমাদের একটি Library ক্লাস আছে যা বইয়ের একটি List ইনজেক্ট করবে।

public class Book {
    private String title;

    public Book(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }
}

public class Library {
    private List<Book> books;

    // Constructor Injection
    public Library(List<Book> books) {
        this.books = books;
    }

    public void showBooks() {
        for (Book book : books) {
            System.out.println(book.getTitle());
        }
    }
}

XML কনফিগারেশন:

<bean id="book1" class="com.example.Book">
    <constructor-arg value="Java Basics"/>
</bean>
<bean id="book2" class="com.example.Book">
    <constructor-arg value="Advanced Java"/>
</bean>

<bean id="library" class="com.example.Library">
    <constructor-arg>
        <list>
            <ref bean="book1"/>
            <ref bean="book2"/>
        </list>
    </constructor-arg>
</bean>

অ্যানোটেশন ভিত্তিক কনফিগারেশন:

@Component
public class Library {
    private List<Book> books;

    @Autowired
    public Library(List<Book> books) {
        this.books = books;
    }

    public void showBooks() {
        for (Book book : books) {
            System.out.println(book.getTitle());
        }
    }
}

এখানে, Library ক্লাসে List<Book> ইনজেক্ট করা হয়েছে এবং আমরা দুটি Book ইনস্ট্যান্স তৈরি করেছি। স্প্রিং কনটেইনার এই বইগুলিকে একটি List হিসাবে Library ক্লাসে ইনজেক্ট করবে।


২. Set এর মাধ্যমে DI পরিচালনা

Set সাধারণত অর্ডারড না-হওয়া কালেকশন হিসেবে ব্যবহৃত হয়, যেখানে যেকোনো অবজেক্ট ইনজেক্ট করা হলেও তাদের নির্দিষ্ট ক্রম বজায় রাখা হয় না।

উদাহরণ:

ধরা যাক, আমাদের একটি FruitBasket ক্লাস আছে যা Set হিসেবে কিছু ফল গ্রহণ করবে।

public class Fruit {
    private String name;

    public Fruit(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

public class FruitBasket {
    private Set<Fruit> fruits;

    // Constructor Injection
    public FruitBasket(Set<Fruit> fruits) {
        this.fruits = fruits;
    }

    public void showFruits() {
        for (Fruit fruit : fruits) {
            System.out.println(fruit.getName());
        }
    }
}

XML কনফিগারেশন:

<bean id="fruit1" class="com.example.Fruit">
    <constructor-arg value="Apple"/>
</bean>
<bean id="fruit2" class="com.example.Fruit">
    <constructor-arg value="Banana"/>
</bean>

<bean id="fruitBasket" class="com.example.FruitBasket">
    <constructor-arg>
        <set>
            <ref bean="fruit1"/>
            <ref bean="fruit2"/>
        </set>
    </constructor-arg>
</bean>

অ্যানোটেশন ভিত্তিক কনফিগারেশন:

@Component
public class FruitBasket {
    private Set<Fruit> fruits;

    @Autowired
    public FruitBasket(Set<Fruit> fruits) {
        this.fruits = fruits;
    }

    public void showFruits() {
        for (Fruit fruit : fruits) {
            System.out.println(fruit.getName());
        }
    }
}

এখানে, FruitBasket ক্লাসে একটি Set ইনজেক্ট করা হয়েছে এবং ফলের সেট ইনজেক্ট করা হয়েছে, যার মধ্যে Apple এবং Banana রয়েছে। Set-এর মধ্যে অবজেক্টগুলির কোনও নির্দিষ্ট ক্রম থাকছে না।


৩. Map এর মাধ্যমে DI পরিচালনা

Map একটি কীগুচক (key-value pair) সংগ্রহ যেখানে প্রতিটি কী (key) মান (value)-এর সাথে যুক্ত থাকে। এটি ব্যবহার করা হয় যখন একাধিক কীগুচক যুক্ত ভ্যালু ইনজেক্ট করার প্রয়োজন হয়।

উদাহরণ:

ধরা যাক, আমাদের একটি EmployeeDetails ক্লাস আছে যা Map এর মাধ্যমে কর্মচারীদের নাম এবং তাদের পদের তথ্য গ্রহণ করবে।

public class Employee {
    private String name;
    private String position;

    public Employee(String name, String position) {
        this.name = name;
        this.position = position;
    }

    public String getName() {
        return name;
    }

    public String getPosition() {
        return position;
    }
}

public class EmployeeDetails {
    private Map<String, Employee> employeeMap;

    // Constructor Injection
    public EmployeeDetails(Map<String, Employee> employeeMap) {
        this.employeeMap = employeeMap;
    }

    public void showEmployeeDetails() {
        for (Map.Entry<String, Employee> entry : employeeMap.entrySet()) {
            System.out.println("ID: " + entry.getKey() + " | Name: " + entry.getValue().getName() + " | Position: " + entry.getValue().getPosition());
        }
    }
}

XML কনফিগারেশন:

<bean id="employee1" class="com.example.Employee">
    <constructor-arg value="John"/>
    <constructor-arg value="Manager"/>
</bean>
<bean id="employee2" class="com.example.Employee">
    <constructor-arg value="Alice"/>
    <constructor-arg value="Developer"/>
</bean>

<bean id="employeeDetails" class="com.example.EmployeeDetails">
    <constructor-arg>
        <map>
            <entry key="1" value-ref="employee1"/>
            <entry key="2" value-ref="employee2"/>
        </map>
    </constructor-arg>
</bean>

অ্যানোটেশন ভিত্তিক কনফিগারেশন:

@Component
public class EmployeeDetails {
    private Map<String, Employee> employeeMap;

    @Autowired
    public EmployeeDetails(Map<String, Employee> employeeMap) {
        this.employeeMap = employeeMap;
    }

    public void showEmployeeDetails() {
        for (Map.Entry<String, Employee> entry : employeeMap.entrySet()) {
            System.out.println("ID: " + entry.getKey() + " | Name: " + entry.getValue().getName() + " | Position: " + entry.getValue().getPosition());
        }
    }
}

এখানে, EmployeeDetails ক্লাসে একটি Map<String, Employee> ইনজেক্ট করা হয়েছে, যেখানে কর্মচারীদের ID কীগুচক হিসেবে এবং তাদের অবস্থা (নাম, পদ) ভ্যালু হিসেবে ইনজেক্ট করা হয়েছে।


সারাংশ

স্প্রিং ডিপেনডেন্সি ইনজেকশনে List, Set, এবং Map ব্যবহার করা হলে, আপনি সহজেই একাধিক ডিপেনডেন্সি ইনজেক্ট করতে পারেন এবং স্প্রিং কনটেইনার এই কালেকশনগুলির মধ্যে অবজেক্টগুলি ইনজেক্ট করে। List ব্যবহার করলে আপনি অবজেক্টগুলির নির্দিষ্ট ক্রম বজায় রাখতে পারবেন, Set ব্যবহার করলে কোনো নির্দিষ্ট ক্রম থাকবে না, এবং Map ব্যবহার করলে আপনি কীগুচক (key-value pair) ভিত্তিক ডিপেনডেন্সি ইনজেক্ট করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...