Bean এবং Spring Container এর ভূমিকা

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

315

Spring Dependency Injection (DI) কী?

Spring Dependency Injection (DI) হলো একটি ডিজাইন প্যাটার্ন যা অবজেক্টগুলোর মধ্যে ডিপেনডেন্সি সম্পর্ক (dependency relationships) ম্যানেজ করতে সহায়তা করে। Spring DI ব্যবহার করে অবজেক্টগুলোকে তাদের প্রয়োজনীয় ডিপেনডেন্সি সরবরাহ করা হয়, অর্থাৎ এক ক্লাসের অবজেক্ট তৈরি করা হয় এবং সেটি অন্য ক্লাসে ইনজেক্ট করা হয়। এটি ম্যানুয়ালি অবজেক্ট তৈরি করার ঝামেলা দূর করে এবং কোডের পুনঃব্যবহারযোগ্যতা, টেস্টেবিলিটি এবং রিডেবিলিটি বাড়ায়।

Spring Framework DI ব্যবহার করে Bean এবং Spring Container এর মধ্যে সম্পর্ক কিভাবে কাজ করে তা বোঝা খুবই গুরুত্বপূর্ণ।


Bean এবং Spring Container এর ভূমিকা

1. Bean কী?

Spring এ, Bean হল একটি অবজেক্ট যা Spring IoC (Inversion of Control) Container দ্বারা পরিচালিত হয়। Spring Container অবজেক্টগুলো তৈরি করে এবং তাদের মধ্যে ডিপেনডেন্সি ইনজেকশন (DI) পরিচালনা করে। প্রতিটি Bean Spring কনটেক্সটের মধ্যে এক একটি অবজেক্ট এবং এটি একটি প্রোগ্রামিং এর ভূমিকা পালন করে।

Bean এর কিছু প্রধান বৈশিষ্ট্য:

  • Object Creation: Spring Container Bean এর অবজেক্ট তৈরি করে।
  • Dependency Management: Spring Container Bean এর ডিপেনডেন্সি ইনজেক্ট করে।
  • Lifecycle Management: Spring Container Bean এর লাইফসাইকেল ম্যানেজ করে, যেমন ইনিশিয়ালাইজেশন এবং ডিসট্রাকশন।

Spring Bean একটি Java ক্লাসের অবজেক্ট হতে পারে, যা একটি Spring IoC Container দ্বারা তৈরি করা হয় এবং ম্যানেজ করা হয়। এই Bean কে Spring XML ফাইল, Java Configuration বা Annotation-based Configuration এর মাধ্যমে কনফিগার করা যায়।

উদাহরণ:

package com.example.model;

public class Car {
    private String model;

    // Constructor
    public Car(String model) {
        this.model = model;
    }

    // Getter and Setter
    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public void start() {
        System.out.println("The car is starting...");
    }
}

এখানে Car ক্লাসটি একটি Bean হতে পারে, যা Spring Container দ্বারা ম্যানেজ করা হবে।


2. Spring Container কী?

Spring Container হলো Spring Framework এর একটি গুরুত্বপূর্ণ অংশ, যা Bean গুলোর সৃষ্টি, কনফিগারেশন এবং ডিপেনডেন্সি ইনজেকশন (DI) ম্যানেজ করে। Spring Container কে IoC Container বা ApplicationContext (তথ্যপূর্ণ Spring কনটেক্সট) বলা হয়। এটি Bean গুলোর সৃষ্টি এবং লাইফসাইকেল পরিচালনা করে এবং যেকোনো Bean এর ডিপেনডেন্সি স্বয়ংক্রিয়ভাবে ইনজেক্ট করে।

Spring Container দুইটি প্রধান উপাদান দিয়ে কাজ করে:

  1. BeanFactory: এটি Spring Framework এর সবচেয়ে মৌলিক কন্টেইনার, যা নির্দিষ্ট Bean গুলো তৈরি এবং ম্যানেজ করে। BeanFactory সাধারনত সহজ এবং লাইটওয়েট হয়, এবং এটি বিশেষত রিসোর্স সীমিত পরিবেশে ব্যবহার করা হয়।
  2. ApplicationContext: এটি BeanFactory এর একটি উন্নত সংস্করণ এবং Spring এর অধিকাংশ বাস্তবিক অ্যাপ্লিকেশনে ব্যবহৃত হয়। ApplicationContext ফিচারগুলো যেমন ইভেন্ট লিসেনিং, ইন্টারন্যাশনালাইজেশন এবং AOP মডিউল সাপোর্টসহ আরও অনেক সুবিধা প্রদান করে।

Spring Container Bean গুলোর ডিপেনডেন্সি ম্যানেজ করে এবং তাদের মেথড কল বা ফাংশনালিটিগুলি সঠিকভাবে ইনজেক্ট করে।

Spring Bean কনফিগারেশন উদাহরণ (XML Configuration):

<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">

    <!-- Define Bean -->
    <bean id="car" class="com.example.model.Car">
        <constructor-arg value="Toyota"/>
    </bean>

</beans>

এখানে, car Bean কে Spring Container দ্বারা তৈরি এবং ম্যানেজ করা হবে।


3. Dependency Injection (DI) এবং Bean Management

Spring Container Bean গুলোর মধ্যে ডিপেনডেন্সি ইনজেকশন করে। Spring DI সাধারণত তিনটি পদ্ধতিতে করা হয়:

  1. Constructor Injection: অবজেক্টের কনস্ট্রাক্টর ব্যবহার করে ডিপেনডেন্সি ইনজেক্ট করা হয়।
  2. Setter Injection: অবজেক্টের Setter মেথডের মাধ্যমে ডিপেনডেন্সি ইনজেক্ট করা হয়।
  3. Field Injection: সরাসরি Bean এর ফিল্ডে ডিপেনডেন্সি ইনজেক্ট করা হয়।

Constructor Injection উদাহরণ:

package com.example.model;

public class Car {
    private Engine engine;

    // Constructor Injection
    public Car(Engine engine) {
        this.engine = engine;
    }

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

Engine Bean এবং DI কনফিগারেশন (XML):

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

এখানে, Car Bean এর কনস্ট্রাক্টর মেথডে Engine Bean ইনজেক্ট করা হচ্ছে। Spring Container এই ইনজেকশন ম্যানেজ করবে।


4. Spring Bean এর LifeCycle

Spring Bean এর লাইফসাইকেল শুরু হয় যখন Spring Container Bean তৈরি করে এবং শেষ হয় যখন Spring Container সেই Bean কে ডিস্ট্রয় করে। Spring Bean এর লাইফসাইকেল সাধারণত নিম্নলিখিত ধাপগুলো অনুসরণ করে:

  1. Bean Instantiation: Bean কে Spring Container ইনস্ট্যান্সিয়েট করে।
  2. Dependency Injection: Spring Container Bean এর ডিপেনডেন্সি ইনজেক্ট করে।
  3. Bean Initialization: Bean কে ইনিশিয়ালাইজ করা হয়।
  4. Bean Destruction: Bean কে ধ্বংস করা হয় (যতটা প্রয়োজন হয়)।

5. Spring Bean Scope

Spring Beans এর কিছু Scope থাকে যা Bean এর জীবনের সময়কাল নির্ধারণ করে:

  • Singleton Scope: একটি Bean শুধুমাত্র একবার তৈরি হয় এবং Spring Container তা পুনঃব্যবহার করে।
  • Prototype Scope: Spring Container প্রতি অনুরোধে নতুন Bean তৈরি করে।
  • Request Scope: প্রতিটি HTTP রিকোয়েস্টে নতুন Bean তৈরি হয়।
  • Session Scope: HTTP সেশন অনুযায়ী Bean তৈরি হয়।
  • Global Session Scope: সার্ভার সেশন অনুযায়ী Bean তৈরি হয় (WebSphere/Portlet এ ব্যবহৃত হয়)।

সারাংশ

Spring DI এর মধ্যে Bean এবং Spring Container এর ভূমিকা অত্যন্ত গুরুত্বপূর্ণ। Bean হলো Spring Container দ্বারা ম্যানেজ করা অবজেক্ট এবং Spring Container হলো সেই পরিবেশ যেখানে Bean গুলো তৈরি, ম্যানেজ এবং ডিপেনডেন্সি ইনজেকশন করা হয়। Spring এর মূল উদ্দেশ্য হল Dependency Injection এর মাধ্যমে কোডকে সহজ, পুনঃব্যবহারযোগ্য, এবং টেস্টযোগ্য করা। Spring Container Bean গুলোর Lifecycle, Scope, এবং Dependency Management সঠিকভাবে পরিচালনা করে।


Content added By
Promotion

Are you sure to start over?

Loading...