Collection Bean Injection এর জন্য @Autowired এবং @Qualifier এর ব্যবহার

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

318

Spring Dependency Injection (DI) ব্যবহারের মাধ্যমে আপনার অ্যাপ্লিকেশনে বিভিন্ন ধরনের Beans এবং তাদের ডিপেনডেন্সি ইনজেক্ট করা হয়। তবে কখনও কখনও Collection Beans (যেমন: List, Set, Map) ইনজেক্ট করতে হয়, যেখানে একাধিক Bean একই টাইপের হয়ে থাকে। এই ধরনের পরিস্থিতিতে @Autowired এবং @Qualifier অ্যানোটেশনগুলি ব্যবহার করা হয়, যা নির্দিষ্ট Bean নির্বাচন এবং সঠিকভাবে ইনজেক্ট করার জন্য কার্যকরী।

@Autowired অ্যানোটেশন

@Autowired স্প্রিং ফ্রেমওয়ার্কে একটি গুরুত্বপূর্ণ অ্যানোটেশন, যা DI ব্যবহারের সময় স্প্রিং কনটেইনারে থাকা Bean গুলোকে স্বয়ংক্রিয়ভাবে ইনজেক্ট করতে সহায়তা করে। এটি একটি বা একাধিক Bean-কে ইনজেক্ট করতে পারে, তবে যখন অনেক Beans এক ধরনের থাকে, তখন এটি সঠিক Bean নির্বাচন করতে পারে না। এই পরিস্থিতিতে @Qualifier ব্যবহার করা হয়।


@Qualifier অ্যানোটেশন

@Qualifier অ্যানোটেশনটি ব্যবহৃত হয় স্প্রিং কনটেইনারে একাধিক Bean থাকলে কোন Bean ইনজেক্ট করতে হবে তা নির্ধারণ করার জন্য। এটি @Autowired এর সাথে ব্যবহার করা হয় এবং নির্দিষ্ট Bean নির্বাচন করতে সহায়তা করে।


@Autowired এবং @Qualifier এর ব্যবহার

ধরা যাক, আপনার অ্যাপ্লিকেশনে দুটি ভিন্ন ধরনের Engine Bean রয়েছে, এবং আপনি একটি Car ক্লাসে সেগুলি ইনজেক্ট করতে চান। এই ক্ষেত্রে @Autowired এবং @Qualifier ব্যবহার করা হবে।

উদাহরণ: Collection Bean Injection

Step 1: Collection Beans তৈরি করা
import org.springframework.stereotype.Component;

@Component("dieselEngine")
public class DieselEngine implements Engine {
    @Override
    public void start() {
        System.out.println("Diesel Engine started");
    }
}

@Component("petrolEngine")
public class PetrolEngine implements Engine {
    @Override
    public void start() {
        System.out.println("Petrol Engine started");
    }
}

ব্যাখ্যা:
এখানে আমরা দুটি Bean তৈরি করেছি: DieselEngine এবং PetrolEngine, যেগুলো Engine ইন্টারফেস ইমপ্লিমেন্ট করে।

Step 2: Collection Bean Injection কনফিগার করা
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
public class Car {

    private List<Engine> engines;

    @Autowired
    @Qualifier("dieselEngine")  // Specify the Bean to be injected
    public void setEngines(List<Engine> engines) {
        this.engines = engines;
    }

    public void startEngines() {
        for (Engine engine : engines) {
            engine.start();
        }
    }
}

ব্যাখ্যা:
এখানে @Autowired ব্যবহার করা হয়েছে Car ক্লাসের setEngines মেথডে, যাতে Engine Bean গুলো ইনজেক্ট করা যায়। তবে যেহেতু এখানে একাধিক Engine Bean থাকতে পারে, তাই @Qualifier ব্যবহার করা হয়েছে dieselEngine Bean ইনজেক্ট করতে।

Step 3: Spring Configuration
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.example")  // Package name where Beans are defined
public class AppConfig {

    @Bean
    public Engine petrolEngine() {
        return new PetrolEngine();
    }

    @Bean
    public Engine dieselEngine() {
        return new DieselEngine();
    }
}

ব্যাখ্যা:
এখানে @ComponentScan ব্যবহার করা হয়েছে স্প্রিং কনটেইনারকে নির্দেশ দেওয়ার জন্য কোন প্যাকেজ থেকে Bean গুলি স্ক্যান করতে হবে। এছাড়াও, petrolEngine() এবং dieselEngine() Bean গুলি কনফিগার করা হয়েছে।

Step 4: Main Application
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainApp {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

        Car car = context.getBean(Car.class);
        car.startEngines();

        context.close();
    }
}

ব্যাখ্যা:
এখানে স্প্রিং কনটেইনার থেকে Car Bean রিট্রাইভ করা হয়েছে এবং startEngines() মেথড কল করা হয়েছে, যা নির্দিষ্ট Engine Bean ইনজেক্ট এবং চালু করবে।


@Autowired এবং @Qualifier এর সুবিধা

  1. Automatic Dependency Injection: @Autowired অ্যানোটেশন স্বয়ংক্রিয়ভাবে Bean ইনজেক্ট করতে সহায়তা করে, যা কোডে কমপ্লেক্সিটি কমায়।
  2. Flexible Dependency Injection: একাধিক Bean থাকলে @Qualifier এর মাধ্যমে নির্দিষ্ট Bean ইনজেক্ট করা যায়।
  3. Clearer Code: @Autowired এবং @Qualifier ব্যবহার করে কনফিগারেশন সহজ এবং স্পষ্ট হয়ে ওঠে।

উপসংহার

@Autowired এবং @Qualifier স্প্রিং ফ্রেমওয়ার্কে Collection Bean Injection এর জন্য অত্যন্ত কার্যকরী টুল। @Autowired এর মাধ্যমে আপনি অটোমেটিক ডিপেনডেন্সি ইনজেকশন করতে পারেন এবং @Qualifier ব্যবহার করে একাধিক Bean এর মধ্যে সঠিক Bean নির্বাচন করতে পারেন। এই দুটি অ্যানোটেশন ব্যবহার করার মাধ্যমে কোড আরও নমনীয়, সহজ এবং পুনঃব্যবহারযোগ্য হয়।

Content added By
Promotion

Are you sure to start over?

Loading...