@Qualifier Annotation কি এবং এর প্রয়োজনীয়তা

Spring @Qualifier Annotation - স্প্রিং ডিপেনডেন্সি ইনজেকশন (ডিআই) (Spring Dependency Injection) - Java Technologies

305

Spring Dependency Injection (DI) ব্যবহারের সময় একাধিক Bean একই টাইপের হলে Spring কনটেইনারকে কোন Bean ব্যবহার করতে হবে তা নির্ধারণ করতে সহায়ক একটি অ্যানোটেশন হলো @Qualifier। এটি মূলত Autowired অ্যানোটেশনের সাথে ব্যবহৃত হয় এবং একটি নির্দিষ্ট Bean নির্বাচন করতে সাহায্য করে, যখন একই টাইপের একাধিক Bean কনটেইনারে উপস্থিত থাকে। এর মাধ্যমে Spring কনটেইনার জানাতে পারে যে কোন নির্দিষ্ট Bean টি ইনজেক্ট করা উচিত।

@Qualifier Annotation এর প্রয়োজনীয়তা

Spring কনটেইনারে একাধিক Bean থাকার সময়, DI (Dependency Injection) ব্যবহারের সময় Spring কোন Bean ইনজেক্ট করবে তা জানাতে সমস্যা তৈরি হতে পারে। যখন দুটি বা তার বেশি Bean একই টাইপের হয়, তখন @Qualifier অ্যানোটেশন ব্যবহার করে Spring কনটেইনারকে স্পষ্টভাবে নির্দেশনা দেওয়া হয় কোন Beanটি ইনজেক্ট করা হবে। এটি বিশেষত ambiguity বা "একাধিক Bean পাওয়া" সমস্যা সমাধানে কার্যকরী।

@Qualifier Annotation এর ব্যবহার

১. Bean কে সুনির্দিষ্ট করা

যখন একাধিক Bean একই টাইপের এবং আপনি নির্দিষ্ট একটি Bean ইনজেক্ট করতে চান, তখন @Qualifier ব্যবহার করতে হবে। এই অ্যানোটেশনটির মানে হলো Spring কনটেইনারের মধ্যে যে Bean এর নাম দেয়া হবে, তা ব্যবহার করা হবে।

উদাহরণ:

ধরা যাক, আমরা একটি Vehicle টাইপের দুইটি Bean তৈরি করেছি: Car এবং Bike

@Component
public class Car implements Vehicle {
    @Override
    public void drive() {
        System.out.println("Driving a car");
    }
}
@Component
public class Bike implements Vehicle {
    @Override
    public void drive() {
        System.out.println("Riding a bike");
    }
}

এখন, আমরা Driver ক্লাসে Vehicle ইনজেক্ট করতে চাই। কিন্তু Spring কনটেইনারে একাধিক Vehicle Bean থাকার কারণে Spring সঠিক Beanটি চয়ন করতে পারবে না। তাই, @Qualifier ব্যবহার করে নির্দিষ্ট Bean নির্বাচন করতে হবে।

২. @Qualifier ব্যবহার করা

@Component
public class Driver {

    private Vehicle vehicle;

    @Autowired
    @Qualifier("car")  // Explicitly specifying the bean to inject
    public void setVehicle(Vehicle vehicle) {
        this.vehicle = vehicle;
    }

    public void driveVehicle() {
        vehicle.drive();
    }
}

এখানে, @Qualifier("car") স্পষ্টভাবে নির্দেশ করছে যে Car Bean ইনজেক্ট করা হবে, যদিও Vehicle টাইপের আরও একটি Bean (Bike) আছে।


@Qualifier এর প্রয়োজনীয়তা এবং সুবিধা

  1. Ambiguity সমাধান: যখন একাধিক Bean একই টাইপের হয় এবং @Autowired ব্যবহার করা হয়, তখন Spring কনটেইনার বুঝতে পারে না কোন Bean ইনজেক্ট করতে হবে। @Qualifier ব্যবহার করে এই বিভ্রান্তি দূর করা যায়।
  2. নির্দিষ্ট Bean নির্বাচন: একাধিক Bean থাকলেও নির্দিষ্ট একটি Bean নির্বাচন করে তার ফিচার বা মেথড ব্যবহার করা সহজ হয়।
  3. কাস্টম নাম বা ID এর মাধ্যমে Bean চিহ্নিত করা: @Qualifier এর মাধ্যমে আপনি কোন নাম বা ID দিয়ে Bean সিলেক্ট করতে পারেন, যা Spring কনটেইনারে থাকা Bean-এর মধ্যে কনফ্লিক্টের সমস্যা এড়াতে সাহায্য করে।
  4. ক্লিন কোড: @Qualifier ব্যবহার করার মাধ্যমে কোড পরিষ্কার থাকে এবং Bean কনফিগারেশন এবং ইনজেকশন সহজ হয়।

@Qualifier এবং @Primary এর তুলনা

Spring Framework-এ @Primary অ্যানোটেশনও ব্যবহার করা যেতে পারে, যা একাধিক Bean থাকতে @Autowired-এর ক্ষেত্রে ডিফল্ট Bean নির্বাচন করতে সাহায্য করে। তবে @Qualifier এবং @Primary একসাথে ব্যবহার করলে আরো নির্দিষ্ট এবং কাস্টম Bean সিলেকশন করা সম্ভব হয়।

উদাহরণ: @Primary ব্যবহার করা

@Component
@Primary
public class Car implements Vehicle {
    @Override
    public void drive() {
        System.out.println("Driving a car");
    }
}

এখন, যদি @Qualifier ব্যবহার না করা হয়, তবে Car Bean ডিফল্টভাবে ইনজেক্ট করা হবে, কারণ এটি @Primary দ্বারা চিহ্নিত।


সারাংশ

@Qualifier অ্যানোটেশন Spring Dependency Injection (DI)-এ একাধিক সমান টাইপের Bean থাকার সময় সুনির্দিষ্টভাবে কোন Bean ইনজেক্ট করতে হবে তা নির্ধারণ করার জন্য ব্যবহৃত হয়। এটি স্পষ্টভাবে একটি নির্দিষ্ট Bean চয়ন করতে সহায়তা করে, যাতে @Autowired ডিফল্টভাবে বিভ্রান্তি সৃষ্টি না করে। @Qualifier এর মাধ্যমে Spring কনটেইনারে একই টাইপের Bean থেকে কোনটি ইনজেক্ট হবে, তা নির্ধারণ করা যায়।


Content added By
Promotion

Are you sure to start over?

Loading...