Spring @Qualifier Annotation

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

@Qualifier অ্যানোটেশন কী?

@Qualifier অ্যানোটেশন স্প্রিং ফ্রেমওয়ার্কে ডিপেনডেন্সি ইনজেকশনে ব্যবহৃত একটি অ্যানোটেশন। এটি স্প্রিং কন্টেইনারকে বলে দেয় কোন নির্দিষ্ট Bean কে ইনজেক্ট করতে হবে, বিশেষ করে যখন একাধিক Bean একই টাইপের হয়। অর্থাৎ, যদি আপনার দুটি বা তার বেশি Bean একই টাইপের হয়, তবে স্প্রিং কোনটি ব্যবহার করবে তা স্পষ্টভাবে নির্দেশ করতে @Qualifier ব্যবহার করা হয়।

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


@Qualifier অ্যানোটেশন ব্যবহার

@Qualifier সাধারণত ডিপেনডেন্সি ইনজেকশনের ক্ষেত্রে Bean গুলি নির্দিষ্ট করার জন্য ব্যবহৃত হয়। যখন একাধিক Bean একই টাইপের থাকে, তখন @Qualifier ব্যবহার করে নির্দিষ্ট Bean নির্বাচন করা হয়।

উদাহরণ:

ধরা যাক, আমাদের একটি Vehicle টাইপের দুটি Bean আছে: Car এবং Bike। এখন আমরা একটি Driver Bean তৈরি করব, যেখানে Vehicle ইনজেক্ট করতে হবে। কিন্তু, যেহেতু Vehicle টাইপের দুটি Bean (Car ও Bike) রয়েছে, তাই @Qualifier ব্যবহার করে স্পষ্টভাবে নির্বাচন করতে হবে যে কোনটি ইনজেক্ট হবে।

Step 1: Vehicle Interface এবং তার Implementations তৈরি করা

public interface Vehicle {
    void drive();
}

@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");
    }
}

Step 2: Driver Class তৈরি করা যেখানে Vehicle ইনজেক্ট করা হবে

@Component
public class Driver {

    private Vehicle vehicle;

    // @Autowired and @Qualifier used to specify which bean to inject
    @Autowired
    @Qualifier("car") // Here we are specifying that the 'car' bean should be injected
    public void setVehicle(Vehicle vehicle) {
        this.vehicle = vehicle;
    }

    public void startJourney() {
        vehicle.drive();  // Calls the drive method of the injected bean
    }
}

এখানে, @Qualifier("car") ব্যবহৃত হয়েছে, যা স্পষ্টভাবে বলে দেয় যে Car Bean ইনজেক্ট করা হবে, Bike Bean নয়।

Step 3: Spring Configuration (XML or Java Config)

যেহেতু আমরা @Component অ্যানোটেশন ব্যবহার করেছি, Spring স্বয়ংক্রিয়ভাবে Bean গুলি তৈরি করবে এবং তাদের কনটেইনারে রাখবে। তবে, যদি XML কনফিগারেশন ব্যবহার করতে চান, তাহলে এরকম কিছু হতে পারে:

<bean id="car" class="com.example.Car"/>
<bean id="bike" class="com.example.Bike"/>
<bean id="driver" class="com.example.Driver"/>

Step 4: Spring Context থেকে Bean ব্যবহার করা

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        Driver driver = context.getBean(Driver.class);
        driver.startJourney();  // Output: Driving a car
    }
}

@Qualifier এর সুবিধা

  1. একাধিক Bean এর মধ্যে নির্দিষ্ট Bean নির্বাচন: যখন একই টাইপের একাধিক Bean থাকে, তখন @Qualifier ব্যবহার করে নির্দিষ্ট Bean নির্বাচন করা সহজ হয়।
  2. কোডের স্পষ্টতা বৃদ্ধি: কোন Bean ইনজেক্ট হবে তা স্পষ্টভাবে নির্দেশ করা হয়, যা কোডের রিডেবিলিটি বৃদ্ধি করে।
  3. ডিপেনডেন্সি কনফিগারেশন সহজ: যখন ডিপেনডেন্সি ইনজেকশনে একাধিক Bean থাকে, তখন @Qualifier ব্যবহারে ইনজেকশনের নির্দিষ্টতা নিশ্চিত হয়।

@Qualifier এবং @Autowired এর সম্পর্ক

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

উদাহরণ:

@Autowired
@Qualifier("car") // "car" নামক Bean ইনজেক্ট হবে
private Vehicle vehicle;

এখানে, @Autowired দ্বারা ইনজেকশন করা হচ্ছে এবং @Qualifier("car") নির্দেশ করছে যে Car Bean ইনজেক্ট করতে হবে।


@Qualifier এর সীমাবদ্ধতা

  • ক্লাসের মধ্যে নামের সংঘর্ষ: যদি Bean এর নাম কনফিগারেশনে ঠিকভাবে না দেওয়া হয়, তবে @Qualifier কাজ করতে পারে না। তাই Bean এর নাম সঠিকভাবে উল্লেখ করা উচিত।
  • ফিল্ড ইনজেকশনে ব্যবহার: @Qualifier কখনোই শুধুমাত্র @Autowired এর সাথে ব্যবহার করা উচিত, নয়তো এটি সঠিকভাবে কাজ করবে না।

সারাংশ

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


Content added By

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

190

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

@Qualifier ব্যবহার করে Specific Bean Inject করা

174

স্প্রিং ডিপেনডেন্সি ইনজেকশন (DI) হল একটি কোর কনসেপ্ট, যেখানে স্প্রিং কনটেইনার বিভিন্ন Bean এর ডিপেনডেন্সি স্বয়ংক্রিয়ভাবে ইনজেক্ট করে। তবে, যদি একাধিক Bean একই ধরনের (যেমন একই টাইপ) ইনজেক্ট করা হয়, তখন স্প্রিং কনটেইনার বিভ্রান্ত হতে পারে যে কোন Bean ইনজেক্ট করা হবে। এ ক্ষেত্রে @Qualifier অ্যানোটেশন ব্যবহার করে নির্দিষ্ট Bean ইনজেক্ট করা হয়।


@Qualifier এর ভূমিকা

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


@Qualifier ব্যবহার করার প্রক্রিয়া

১. @Qualifier অ্যানোটেশন নির্দিষ্ট Bean কে ইনজেক্ট করার জন্য স্প্রিং কনটেইনারকে নির্দেশ দেয়। ২. @Qualifier এর মান হিসেবে Bean এর id বা name প্রদান করতে হয়, যেটি Bean এর @Component বা @Bean অ্যানোটেশনের মধ্যে ডিফাইন করা হয়।


উদাহরণ সহ @Qualifier ব্যবহার

ধরা যাক, আমাদের দুটি EmployeeService Bean রয়েছে এবং আমরা চাই যে নির্দিষ্ট Bean ইনজেক্ট করা হোক।

Step ১: Bean গুলি তৈরি

@Component
public class EmployeeServiceFullTime implements EmployeeService {
    @Override
    public String getEmployeeType() {
        return "Full-Time Employee";
    }
}
@Component
public class EmployeeServicePartTime implements EmployeeService {
    @Override
    public String getEmployeeType() {
        return "Part-Time Employee";
    }
}

এখানে, EmployeeServiceFullTime এবং EmployeeServicePartTime দুটি Bean রয়েছে যেগুলি একই ইন্টারফেস EmployeeService ইমপ্লিমেন্ট করেছে।

Step ২: @Qualifier ব্যবহার করে নির্দিষ্ট Bean ইনজেক্ট করা

@Component
public class EmployeeController {

    private EmployeeService employeeService;

    @Autowired
    @Qualifier("employeeServiceFullTime")  // Specify which Bean to inject
    public void setEmployeeService(EmployeeService employeeService) {
        this.employeeService = employeeService;
    }

    public String getEmployeeType() {
        return employeeService.getEmployeeType();
    }
}

এখানে, @Qualifier("employeeServiceFullTime") ব্যবহার করা হয়েছে, যার মাধ্যমে স্প্রিং কনটেইনার EmployeeServiceFullTime Bean টি ইনজেক্ট করবে।

Step ৩: স্প্রিং কনফিগারেশন

@Configuration
@ComponentScan("com.example")
public class AppConfig {
}

এখানে, @ComponentScan অ্যানোটেশন দ্বারা স্প্রিং কনটেইনারকে com.example প্যাকেজে থাকা সব Bean গুলি স্ক্যান করার জন্য নির্দেশ দেওয়া হয়েছে।

Step ৪: Main Application

public class MainApp {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        EmployeeController employeeController = context.getBean(EmployeeController.class);
        System.out.println(employeeController.getEmployeeType());  // Output: Full-Time Employee
        context.close();
    }
}

এখানে, employeeController.getEmployeeType() কল করলে আউটপুট হিসেবে "Full-Time Employee" পাওয়া যাবে, কারণ @Qualifier("employeeServiceFullTime") এর মাধ্যমে সুনির্দিষ্ট Bean ইনজেক্ট করা হয়েছে।


@Qualifier এর আরও উদাহরণ

একাধিক Bean এর মধ্যে @Qualifier ব্যবহার

@Component("employeeServiceFullTime")
public class EmployeeServiceFullTime implements EmployeeService {
    @Override
    public String getEmployeeType() {
        return "Full-Time Employee";
    }
}
@Component("employeeServicePartTime")
public class EmployeeServicePartTime implements EmployeeService {
    @Override
    public String getEmployeeType() {
        return "Part-Time Employee";
    }
}

এখানে, @Qualifier ব্যবহার করার সময় Bean এর name বা id এর সাথে মিলিয়ে নাম প্রদান করতে হয়।

@Autowired
@Qualifier("employeeServicePartTime")
private EmployeeService employeeService;

এভাবে, স্প্রিং কনটেইনারে থাকা নির্দিষ্ট Bean নির্বাচন করতে @Qualifier ব্যবহার করা হয়।


@Qualifier এর সুবিধা

  1. বিশিষ্ট Bean নির্বাচন: একাধিক Bean থাকতে পারলেও @Qualifier ব্যবহারের মাধ্যমে নির্দিষ্ট Bean ইনজেক্ট করা যায়।
  2. কোডের পরিষ্কারতা: কোড পরিষ্কার এবং সহজে মেইনটেনেবল হয়, কারণ SpEL বা অন্যান্য জটিল কৌশল ছাড়া নির্দিষ্ট Bean নির্বাচন করা যায়।
  3. নিরাপত্তা: ডিপেনডেন্সি ইনজেকশন প্রক্রিয়া সহজ এবং সঠিকভাবে কাজ করে, যা অ্যাপ্লিকেশন স্থিতিশীল রাখে।

উপসংহার

স্প্রিং এর @Qualifier অ্যানোটেশন ব্যবহারের মাধ্যমে একাধিক Bean এর মধ্যে নির্দিষ্ট Bean ইনজেক্ট করা যায়, যা ডিপেনডেন্সি ইনজেকশন প্রক্রিয়াটিকে আরও নমনীয় এবং কার্যকরী করে তোলে। বিশেষত যখন একই ধরনের (same type) Bean একাধিক থাকে, তখন এটি স্পষ্টভাবে কোন Bean ইনজেক্ট হবে তা নির্ধারণ করে। @Qualifier এবং @Autowired একসাথে ব্যবহার করে স্প্রিং ফ্রেমওয়ার্কে নির্দিষ্ট Bean নির্বাচন করা সহজ এবং পরিষ্কার হয়।


Content added By

উদাহরণ সহ @Qualifier এর ব্যবহার

181

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

@Qualifier এর উদ্দেশ্য

যখন Spring IoC Container-এ একাধিক Bean থাকে যেগুলোর টাইপ একই (উদাহরণস্বরূপ একই ইন্টারফেস বা সুপারক্লাস), তখন Spring অটোমেটিকালি সঠিক Bean ইনজেক্ট করতে পারে না। এই পরিস্থিতিতে, @Qualifier অ্যানোটেশন ব্যবহৃত হয় সঠিক Bean নির্ধারণের জন্য।


@Qualifier এর ব্যবহার

1. @Qualifier এর সাথে Bean Definition

ধরা যাক, আমাদের দুটি Engine Bean আছে—একটি ElectricEngine এবং আরেকটি DieselEngine। আমাদের একটি Car Bean রয়েছে, যেখানে আমরা সঠিক Engine Bean ইনজেক্ট করতে চাই।

Step 1: Bean Classes

Engine Interface:

public interface Engine {
    void start();
}

ElectricEngine Class:

import org.springframework.stereotype.Component;

@Component("electricEngine")
public class ElectricEngine implements Engine {
    @Override
    public void start() {
        System.out.println("Electric Engine is starting...");
    }
}

DieselEngine Class:

import org.springframework.stereotype.Component;

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

2. @Qualifier ব্যবহার করে Dependency Injection

এখন আমাদের Car ক্লাসে Engine Bean ইনজেক্ট করতে হবে, কিন্তু যেহেতু দুটি Engine Bean আছে, তাই @Qualifier অ্যানোটেশন ব্যবহার করে আমরা নির্দিষ্ট Bean নির্বাচন করব।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class Car {
    
    private Engine engine;

    // Constructor Injection with @Qualifier
    @Autowired
    public Car(@Qualifier("electricEngine") Engine engine) {
        this.engine = engine;
    }

    public void startCar() {
        engine.start(); // This will invoke ElectricEngine's start method
    }
}

এখানে, @Qualifier("electricEngine") স্পষ্টভাবে ElectricEngine Bean ইনজেক্ট করার জন্য নির্দেশনা দিচ্ছে। যদি @Qualifier ব্যবহার না করা হত, Spring কোন Bean নির্বাচন করতে পারত না এবং এটি একটি NoUniqueBeanDefinitionException তৈরি করত।


3. Spring Configuration

Spring Configuration class তে আমরা Beans কনফিগার করব:

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("com.example") // Specify package for component scanning
public class AppConfig {
}

4. Main Application Class

এখন আমরা ApplicationContext ব্যবহার করে Spring Container লোড করব এবং Car Bean পাবো।

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainApp {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        
        // Get the Car Bean from the context
        Car car = context.getBean(Car.class);
        
        // Start the car
        car.startCar();  // Output: Electric Engine is starting...
    }
}

@Qualifier ব্যবহার করার আরও একটি উদাহরণ

ধরা যাক, আমাদের PaymentService ইন্টারফেস রয়েছে এবং তার দুটি বাস্তবায়ন—CreditCardPayment এবং PayPalPayment। আমরা PaymentService Bean ইনজেক্ট করতে চাই, তবে @Qualifier ব্যবহার করে নির্দিষ্ট ধরনের PaymentService নির্বাচন করতে পারব।

PaymentService Interface:

public interface PaymentService {
    void makePayment();
}

CreditCardPayment Class:

import org.springframework.stereotype.Component;

@Component("creditCardPayment")
public class CreditCardPayment implements PaymentService {
    @Override
    public void makePayment() {
        System.out.println("Payment made through Credit Card.");
    }
}

PayPalPayment Class:

import org.springframework.stereotype.Component;

@Component("payPalPayment")
public class PayPalPayment implements PaymentService {
    @Override
    public void makePayment() {
        System.out.println("Payment made through PayPal.");
    }
}

PaymentProcessor Class:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class PaymentProcessor {

    private PaymentService paymentService;

    // Constructor Injection with @Qualifier
    @Autowired
    public PaymentProcessor(@Qualifier("payPalPayment") PaymentService paymentService) {
        this.paymentService = paymentService;
    }

    public void processPayment() {
        paymentService.makePayment(); // Will invoke PayPalPayment's makePayment method
    }
}

Main Application:

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainApp {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        
        PaymentProcessor processor = context.getBean(PaymentProcessor.class);
        processor.processPayment();  // Output: Payment made through PayPal.
    }
}

সারাংশ

@Qualifier অ্যানোটেশন ব্যবহার করে Spring Dependency Injection-এ একাধিক Bean এক ধরনের হলেও সঠিক Bean নির্বাচন করা যায়। যখন একই ধরনের একাধিক Bean থাকে, তখন @Qualifier ব্যবহার করে আপনি কোন Bean ইনজেক্ট করতে চান তা স্পষ্টভাবে নির্ধারণ করতে পারেন। এটি constructor injection, field injection এবং setter injection সকল ক্ষেত্রে কার্যকর। SpEL এবং @Qualifier একসাথে ব্যবহৃত হলে আরও শক্তিশালী এবং নমনীয় অ্যাপ্লিকেশন তৈরি করা যায়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...