Spring DI এর কাজের প্রক্রিয়া

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

313

Spring Dependency Injection (DI) হল Spring Framework-এর একটি গুরুত্বপূর্ণ ফিচার যা ইনস্ট্যান্সের মধ্যে প্রয়োজনীয় অবজেক্টগুলো স্বয়ংক্রিয়ভাবে ইনজেক্ট করে। এটি একটি ডিজাইন প্যাটার্ন, যেখানে অবজেক্টের নির্ভরতা (dependencies) বাইরের কোনও সিস্টেম (যেমন Spring Container) দ্বারা সরবরাহ করা হয়, পরিবর্তে নিজে সেগুলি তৈরি করে না। Spring DI এর মাধ্যমে কোডের মডুলারিটি বৃদ্ধি পায়, টেস্টিং সহজ হয় এবং কোডের রক্ষণাবেক্ষণ এবং পুনঃব্যবহারযোগ্যতা উন্নত হয়।

Spring DI এর কাজের প্রক্রিয়া খুবই সরল, যেখানে Spring Container একটি অবজেক্ট তৈরি করে এবং সেই অবজেক্টের জন্য প্রয়োজনীয় অন্যান্য অবজেক্টগুলোর ইনজেকশন করে।


Spring DI এর কাজের প্রক্রিয়া

Spring DI এর কাজের প্রক্রিয়া কিছু নির্দিষ্ট ধাপে বিভক্ত করা যায়। সেগুলো হলো:

১. Bean Configuration (বিন কনফিগারেশন)

Spring DI এর প্রথম ধাপ হল Bean Configuration। এখানে Spring Container-এ কোন কোন অবজেক্ট (Beans) তৈরি হবে, তাদের কনফিগারেশন বা সংজ্ঞা দেওয়া হয়। Beans তৈরি করার জন্য সাধারণত XML Configuration, Java Configuration (annotated classes), অথবা Annotation-based Configuration ব্যবহৃত হয়।

XML Configuration Example:

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

Java Configuration Example:

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

২. Creating Beans in the Container

Spring Container কনফিগারেশন ফাইল থেকে নির্দিষ্ট Beans তৈরি করে। Spring Container সব Beans কে singleton বা prototype scope অনুযায়ী ইন্সট্যান্সিয়েট (instantiate) করে।

Example of Bean Definition in Java:

@Component
public class Car {
    private Engine engine;

    @Autowired
    public Car(Engine engine) {
        this.engine = engine;
    }
}

Bean Creation in Container:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
Car car = context.getBean(Car.class);

৩. Dependency Injection (ডিপেনডেন্সি ইনজেকশন)

Spring DI এর মূল কাজ হল অবজেক্টের নির্ভরতা ইনজেক্ট করা। Spring Container যখন একটি Bean তৈরি করে, তখন সেই Bean এর জন্য নির্দিষ্ট সব ইনজেকশন ডিপেনডেন্সি অটোমেটিক্যালি ইনজেক্ট করে। এই ইনজেকশনটি Constructor Injection, Setter Injection, অথবা Field Injection মাধ্যমে হতে পারে।

Constructor Injection:
@Component
public class Car {
    private Engine engine;

    @Autowired
    public Car(Engine engine) {
        this.engine = engine;
    }
}

এখানে, Engine অবজেক্টটি Car অবজেক্টের কনস্ট্রাক্টর ইনজেকশন মাধ্যমে প্রদান করা হচ্ছে।

Setter Injection:
@Component
public class Car {
    private Engine engine;

    @Autowired
    public void setEngine(Engine engine) {
        this.engine = engine;
    }
}

Setter Injection এর মাধ্যমে Car এর setEngine() মেথডের মাধ্যমে Engine ইনজেক্ট করা হচ্ছে।

Field Injection:
@Component
public class Car {
    @Autowired
    private Engine engine;
}

Field Injection-এ @Autowired অ্যানোটেশন সরাসরি ফিল্ডে দেওয়া হয়, এবং Spring Container স্বয়ংক্রিয়ভাবে ইনজেকশন সম্পন্ন করে।

৪. Resolving Dependencies (ডিপেনডেন্সি রিজল্ভ করা)

Spring Container অটোমেটিক্যালি যেকোনো Bean এর ডিপেনডেন্সি রিজল্ভ করে এবং সেগুলিকে ইনজেক্ট করে। যেমন, যদি Car Bean-এ Engine Bean এর প্রয়োজন থাকে, তাহলে Spring Container স্বয়ংক্রিয়ভাবে Engine Bean কে Car Bean-এ ইনজেক্ট করবে।

@Component
public class Engine {
    private String model;

    public Engine() {
        this.model = "V8";
    }

    public String getModel() {
        return model;
    }
}

Car Bean এর মধ্যে Engine Bean ইনজেক্ট হওয়া:

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

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        Car car = context.getBean(Car.class);
        System.out.println(car.getEngine().getModel());
    }
}

এখানে Engine Bean কে Car Bean এর মধ্যে স্বয়ংক্রিয়ভাবে ইনজেক্ট করা হবে, এবং ফলস্বরূপ আউটপুট হবে "V8"

৫. Lifecycle Management (লাইফসাইকেল ম্যানেজমেন্ট)

Spring Container Bean এর লাইফসাইকেল পরিচালনা করে। এর মধ্যে Bean এর initialization (ইনিশিয়ালাইজেশন) এবং destruction (ডেস্ট্রাকশন) রয়েছে। Bean এর lifecycle ম্যানেজ করার জন্য @PostConstruct এবং @PreDestroy অ্যানোটেশন ব্যবহার করা যায়।

@Component
public class Car {
    
    @PostConstruct
    public void init() {
        System.out.println("Car Initialized!");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("Car Destroyed!");
    }
}

Spring Container স্বয়ংক্রিয়ভাবে init() এবং destroy() মেথড কল করবে Bean এর জীবনচক্র অনুযায়ী।

৬. Context Management

Spring Container Bean তৈরি, Dependency Injection, এবং Bean এর লাইফসাইকেল পরিচালনা করার পর, আপনি Bean গুলি Spring Context থেকে অ্যাক্সেস করতে পারেন। Spring Context হল Spring Container যা Spring Beans এর রেজিস্ট্রি হিসেবে কাজ করে।

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
Car car = context.getBean(Car.class);
System.out.println(car);
context.close();

context.getBean(Car.class) এর মাধ্যমে Car Bean অ্যাক্সেস করা হবে, এবং context.close() এর মাধ্যমে Spring Context বন্ধ করা হবে।


সারাংশ

Spring Dependency Injection (DI) একটি গুরুত্বপূর্ণ ফিচার যা Spring Framework-এ কোডের মডুলারিটি, রক্ষণাবেক্ষণ এবং টেস্টিং সহজ করে তোলে। Spring DI এর কাজের প্রক্রিয়া হলো:

  1. Bean Configuration: Spring Container Beans কনফিগার করে।
  2. Bean Creation: Spring Beans তৈরি করা হয়।
  3. Dependency Injection: DI এর মাধ্যমে অবজেক্টের নির্ভরতা ইনজেক্ট করা হয়।
  4. Resolving Dependencies: Spring Container Dependencies রিজল্ভ করে ইনজেক্ট করে।
  5. Lifecycle Management: Bean এর লাইফসাইকেল Spring Container পরিচালনা করে।
  6. Context Management: Spring Context থেকে Beans অ্যাক্সেস করা হয়।

Spring DI ব্যবহার করার মাধ্যমে কোডের পুনঃব্যবহারযোগ্যতা, ফ্লেক্সিবিলিটি এবং টেস্টিং সহজতর হয়।

Content added By
Promotion

Are you sure to start over?

Loading...