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

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

299

@Autowired কী?

@Autowired হলো একটি Spring Framework অ্যানোটেশন যা Dependency Injection (DI) এর জন্য ব্যবহৃত হয়। এটি Spring Container কে বলে দেয় যে, একটি Bean এর ডিপেনডেন্সি স্বয়ংক্রিয়ভাবে ইনজেক্ট করতে হবে। Spring অ্যাপ্লিকেশনে, যেখানে কোনো Bean এর ডিপেনডেন্সি সরবরাহ করতে হয়, সেখানে @Autowired অ্যানোটেশন ব্যবহার করা হয়, এবং Spring এই ডিপেনডেন্সি ইনজেক্ট করে দেয়।

@Autowired এর ব্যবহার:

  • Field Injection
  • Setter Injection
  • Constructor Injection

1. Field Injection

Field Injection হল Spring DI এর সবচেয়ে সহজ পদ্ধতি, যেখানে সরাসরি ফিল্ডে @Autowired অ্যানোটেশন ব্যবহৃত হয়। Spring Container স্বয়ংক্রিয়ভাবে প্রয়োজনীয় Bean ইনজেক্ট করে।

উদাহরণ: Field Injection

ধরা যাক, আমাদের একটি Car ক্লাস রয়েছে, যেটি একটি Engine Bean এর ডিপেনডেন্সি নেয়। এখানে Field Injection ব্যবহার করা হয়েছে।

Engine ক্লাস:

package com.example.model;

public class Engine {
    public void ignite() {
        System.out.println("Engine started");
    }
}

Car ক্লাস:

package com.example.model;

import org.springframework.beans.factory.annotation.Autowired;

public class Car {
    
    @Autowired
    private Engine engine; // Injecting the Engine Bean

    public void start() {
        engine.ignite();
        System.out.println("Car is starting...");
    }
}

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

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="engine" class="com.example.model.Engine"/>
    <bean id="car" class="com.example.model.Car"/>

</beans>

এখানে, @Autowired ব্যবহার করা হয়েছে Car ক্লাসের engine ফিল্ডে। Spring স্বয়ংক্রিয়ভাবে Engine Bean ইনজেক্ট করবে এবং Car Bean কে পূর্ণাঙ্গ করবে।


2. Setter Injection

Setter Injection পদ্ধতিতে, ডিপেনডেন্সি সেট করার জন্য Setter মেথড ব্যবহৃত হয়। Spring স্বয়ংক্রিয়ভাবে সেটার মেথডের মাধ্যমে ডিপেনডেন্সি ইনজেক্ট করে।

উদাহরণ: Setter Injection

ধরা যাক, আমরা আগের উদাহরণটিকে Setter Injection এর মাধ্যমে পরিবর্তন করি।

Car ক্লাস:

package com.example.model;

import org.springframework.beans.factory.annotation.Autowired;

public class Car {
    
    private Engine engine;

    @Autowired
    public void setEngine(Engine engine) {
        this.engine = engine; // Injecting the Engine Bean
    }

    public void start() {
        engine.ignite();
        System.out.println("Car is starting...");
    }
}

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

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="engine" class="com.example.model.Engine"/>
    <bean id="car" class="com.example.model.Car"/>

</beans>

এখানে, @Autowired অ্যানোটেশনটি Setter মেথড setEngine() এর উপর ব্যবহার করা হয়েছে, যার মাধ্যমে Engine Bean স্বয়ংক্রিয়ভাবে ইনজেক্ট করা হবে।


3. Constructor Injection

Constructor Injection হল ডিপেনডেন্সি ইনজেকশনের সবচেয়ে সুপারিশকৃত পদ্ধতি। এতে ডিপেনডেন্সি ইনজেক্ট করা হয় কনস্ট্রাক্টর মেথডের মাধ্যমে। এটি immutable objects তৈরি করার জন্য উপযুক্ত এবং টেস্টিং এর জন্য সহজ।

উদাহরণ: Constructor Injection

Car ক্লাস:

package com.example.model;

import org.springframework.beans.factory.annotation.Autowired;

public class Car {
    
    private Engine engine;

    @Autowired
    public Car(Engine engine) {
        this.engine = engine; // Injecting the Engine Bean via Constructor
    }

    public void start() {
        engine.ignite();
        System.out.println("Car is starting...");
    }
}

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

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="engine" class="com.example.model.Engine"/>
    <bean id="car" class="com.example.model.Car"/>

</beans>

এখানে, Constructor Injection ব্যবহার করা হয়েছে Car ক্লাসে। @Autowired কনস্ট্রাক্টর মেথডে ব্যবহার করা হয়েছে এবং Spring স্বয়ংক্রিয়ভাবে Engine Bean ইনজেক্ট করবে।


4. @Autowired এবং Qualifier অ্যানোটেশন

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

উদাহরণ: @Autowired এবং @Qualifier ব্যবহার

Engine এবং ElectricEngine ক্লাস:

package com.example.model;

public class Engine {
    public void ignite() {
        System.out.println("Engine started");
    }
}

public class ElectricEngine extends Engine {
    public void ignite() {
        System.out.println("Electric Engine started");
    }
}

Car ক্লাস:

package com.example.model;

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

public class Car {
    
    private Engine engine;

    @Autowired
    @Qualifier("electricEngine") // Specify which Engine to inject
    public void setEngine(Engine engine) {
        this.engine = engine;
    }

    public void start() {
        engine.ignite();
        System.out.println("Car is starting...");
    }
}

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

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="engine" class="com.example.model.Engine"/>
    <bean id="electricEngine" class="com.example.model.ElectricEngine"/>
    <bean id="car" class="com.example.model.Car"/>

</beans>

এখানে, @Qualifier অ্যানোটেশন ব্যবহার করা হয়েছে যাতে Spring জানে কোন Engine Bean ইনজেক্ট করতে হবে যখন একাধিক Bean (যেমন Engine এবং ElectricEngine) একই টাইপের হবে।


সারাংশ

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


Content added By
Promotion

Are you sure to start over?

Loading...