Spring Bean Scope

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

262

Spring Bean Scope নির্ধারণ করে একটি Bean এর জীবনের পরিধি এবং কনটেইনারে তার অস্তিত্ব কতটুকু সময় থাকবে। Spring Framework-এ ডিফল্টভাবে Bean-এর একটি নির্দিষ্ট জীবনচক্র থাকে, কিন্তু কখনো কখনো একটি Bean এর জীবনের পরিধি নির্ধারণের জন্য আপনি আলাদা আলাদা Bean Scope ব্যবহার করতে পারেন।

Spring Bean Scope ব্যবহার করে আমরা নিয়ন্ত্রণ করতে পারি, একটি Bean কতবার তৈরি হবে, কিভাবে এটি ব্যবহৃত হবে এবং কখন এটি ধ্বংস হবে। এটি Spring IoC (Inversion of Control) কনটেইনারের মাধ্যমে করা হয়, যা Bean এর lifecycle এবং তাদের পরিসরকে পরিচালনা করে।


Spring Bean Scope এর ধরন

Spring Framework-এ মোট পাঁচটি প্রধান Bean Scope রয়েছে, যেগুলি বিভিন্ন প্রেক্ষাপটে ব্যবহার করা হয়।


১. Singleton Scope (ডিফল্ট Scope)

Singleton Scope হল Spring Framework-এ ডিফল্ট Bean Scope। এটি Spring কনটেইনারে একটি Bean এর জন্য একমাত্র একটি ইনস্ট্যান্স তৈরি করে এবং সেই Bean এর ইনস্ট্যান্স পুরো অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়।

  • বর্ণনা: Spring কনটেইনারের মধ্যে শুধুমাত্র একটি Bean ইনস্ট্যান্স থাকবে।
  • ব্যবহার: যখন আপনি চান যে একটি Bean পুরো অ্যাপ্লিকেশন জুড়ে একটি একক অবজেক্ট হিসাবে ব্যবহার হোক।

উদাহরণ:

@Component
public class MyService {
    // Singleton Scope, এটি Spring কনটেইনারে শুধুমাত্র একবার ইনস্ট্যান্টিয়েট হবে।
}

Bean Declaration:

Spring @Component অ্যানোটেশন দ্বারা Singleton Scope ডিফাইন করা হয়। এর মানে হলো, Spring কনটেইনারের মধ্যে একটি MyService Bean এর একমাত্র ইনস্ট্যান্স থাকবে।


২. Prototype Scope

Prototype Scope-এ, Spring কনটেইনার প্রতি Bean রিকোয়েস্টের জন্য একটি নতুন ইনস্ট্যান্স তৈরি করে। এর মানে হলো, প্রতি রিকোয়েস্টে একটি নতুন Bean ইনস্ট্যান্স তৈরি হবে এবং একাধিক বার সেই Bean ব্যবহৃত হলে প্রত্যেকবার নতুন ইনস্ট্যান্স তৈরি হবে।

  • বর্ণনা: প্রতিটি রিকোয়েস্টের জন্য একটি নতুন Bean ইনস্ট্যান্স তৈরি হবে।
  • ব্যবহার: যখন আপনি চান যে একটি Bean প্রতিবার একটি নতুন ইনস্ট্যান্স নিয়ে কাজ করুক।

উদাহরণ:

@Component
@Scope("prototype")
public class MyService {
    // Prototype Scope, প্রতি রিকোয়েস্টে একটি নতুন Bean ইনস্ট্যান্স তৈরি হবে।
}

Bean Declaration:

@Scope("prototype") ব্যবহার করে Prototype Scope ডিফাইন করা হয়। এর মানে হলো, MyService Bean প্রতি রিকোয়েস্টে নতুন করে তৈরি হবে।


৩. Request Scope

Request Scope কেবলমাত্র HTTP রিকোয়েস্ট ভিত্তিক। এতে, Spring কনটেইনার প্রতি HTTP রিকোয়েস্টের জন্য একটি নতুন Bean তৈরি করে এবং সেই Bean এর জীবনকাল HTTP রিকোয়েস্টের সময়কাল পর্যন্ত থাকে।

  • বর্ণনা: প্রতি HTTP রিকোয়েস্টে একটি নতুন Bean ইনস্ট্যান্স তৈরি হয়।
  • ব্যবহার: ওয়েব অ্যাপ্লিকেশনগুলির মধ্যে যেখানে HTTP রিকোয়েস্টের জন্য একটি নতুন Bean চান।

উদাহরণ:

@Component
@Scope("request")
public class MyRequestService {
    // Request Scope, প্রতি HTTP রিকোয়েস্টে নতুন Bean ইনস্ট্যান্স তৈরি হবে।
}

Bean Declaration:

@Scope("request") ব্যবহার করে Request Scope ডিফাইন করা হয়। এটি শুধু ওয়েব অ্যাপ্লিকেশনেই কার্যকরী।


৪. Session Scope

Session Scope HTTP সেশন ভিত্তিক। প্রতিটি HTTP সেশনের জন্য Spring কনটেইনার একটি নতুন Bean তৈরি করে এবং সেই Bean এর জীবনকাল সেশনের সময়কাল পর্যন্ত থাকে। যখন HTTP সেশন শেষ হয়, তখন Bean ধ্বংস হয়ে যায়।

  • বর্ণনা: প্রতি HTTP সেশনে একটি নতুন Bean ইনস্ট্যান্স তৈরি হয়।
  • ব্যবহার: ওয়েব অ্যাপ্লিকেশনের মধ্যে যেখানে ব্যবহারকারী সেশন ভিত্তিক ডেটা রাখতে চান।

উদাহরণ:

@Component
@Scope("session")
public class MySessionService {
    // Session Scope, প্রতি HTTP সেশনে নতুন Bean ইনস্ট্যান্স তৈরি হবে।
}

Bean Declaration:

@Scope("session") ব্যবহার করে Session Scope ডিফাইন করা হয়। এটি সাধারণত ওয়েব অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়।


৫. Application Scope

Application Scope Spring Bean অ্যাপ্লিকেশন ভিত্তিক। এতে, একবার একটি Bean তৈরি হলে, তা অ্যাপ্লিকেশন চলাকালীন সময়ে একমাত্র ইনস্ট্যান্স হিসেবে শেয়ার করা হয়। এটি ওয়েব অ্যাপ্লিকেশন থেকে সম্পূর্ণ অ্যাপ্লিকেশন সেশনে শেয়ার করা হয়।

  • বর্ণনা: অ্যাপ্লিকেশন চলাকালীন একমাত্র Bean ইনস্ট্যান্স থাকবে।
  • ব্যবহার: যেখানে অ্যাপ্লিকেশন লেভেলে একটি Bean শেয়ার করতে হবে।

উদাহরণ:

@Component
@Scope("application")
public class MyApplicationService {
    // Application Scope, অ্যাপ্লিকেশন চলাকালীন একটি Bean ইনস্ট্যান্স থাকবে।
}

Bean Declaration:

@Scope("application") ব্যবহার করে Application Scope ডিফাইন করা হয়। এটি অ্যাপ্লিকেশন সাপোর্ট করে যেখানে একটি Bean পুরো অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়।


৬. WebSocket Scope

Spring 4.0 থেকে WebSocket scope যোগ করা হয়েছে। এটি WebSocket সেশন ভিত্তিক Bean তৈরি করে। যখন WebSocket সেশন শুরু হয়, তখন একটি নতুন Bean তৈরি হয় এবং সেশন শেষ হলে তা ধ্বংস হয়।

  • বর্ণনা: WebSocket সেশন ভিত্তিক Bean তৈরি হয়।
  • ব্যবহার: WebSocket অ্যাপ্লিকেশনগুলির জন্য।
@Component
@Scope("websocket")
public class MyWebSocketService {
    // WebSocket Scope, WebSocket সেশন ভিত্তিক।
}

সারাংশ

Spring Bean Scope একটি Bean এর জীবনকাল এবং কনটেইনারের মধ্যে তার অস্তিত্বের পরিধি নির্ধারণ করে। Spring Framework-এ মোট ছয়টি প্রধান Bean Scope রয়েছে:

  1. Singleton: কেবল একবার Bean তৈরি হয় এবং পুরো অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়।
  2. Prototype: প্রতিবার Bean রিকোয়েস্টের জন্য নতুন Bean ইনস্ট্যান্স তৈরি হয়।
  3. Request: প্রতি HTTP রিকোয়েস্টে একটি নতুন Bean ইনস্ট্যান্স তৈরি হয়।
  4. Session: প্রতি HTTP সেশনে একটি নতুন Bean ইনস্ট্যান্স তৈরি হয়।
  5. Application: অ্যাপ্লিকেশন চলাকালীন সময়ে একটি Bean একমাত্র ইনস্ট্যান্সে থাকে।
  6. WebSocket: WebSocket সেশন ভিত্তিক Bean তৈরি হয়।

এটি আপনার Spring অ্যাপ্লিকেশনকে আরো নমনীয় এবং কার্যকরী করে তোলে, কারণ আপনি নির্দিষ্টভাবে নিয়ন্ত্রণ করতে পারেন যে একটি Bean কিভাবে এবং কখন তৈরি হবে এবং শেষ হবে।

Content added By

Spring Dependency Injection (DI) হল Spring Framework এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা অবজেক্টগুলির মধ্যে ডিপেনডেন্সি ম্যানেজমেন্ট সহজ করে। Spring Bean Scope হল Spring Beans এর লাইফ সাইকেল এবং ব্যবহারের পরিসীমা নির্ধারণকারী একটি কনফিগারেশন। এটি Spring Beans কিভাবে তৈরি হয়, তাদের মধ্যে ডিপেনডেন্সি কিভাবে ইনজেক্ট করা হয়, এবং সেগুলির জীবনকাল কতটুকু থাকবে, তা নিয়ন্ত্রণ করে। Bean Scope নির্ধারণ করা Spring অ্যাপ্লিকেশনে মেমরি ব্যবস্থাপনা, পারফরম্যান্স এবং অ্যাপ্লিকেশনের আচরণের উপর সরাসরি প্রভাব ফেলে।


Bean Scope কি?

Bean Scope হল Spring Framework এর একটি গুরুত্বপূর্ণ ধারণা যা Spring Container-এ তৈরি হওয়া Beans-এর জীবনের সময়কাল এবং ব্যবহারের পরিসীমা নির্ধারণ করে। Spring Bean Scope তিনটি প্রধান ধারণায় বিভক্ত:

  1. Singleton Scope
  2. Prototype Scope
  3. Request Scope (Web Applications-এর জন্য)
  4. Session Scope (Web Applications-এর জন্য)
  5. GlobalSession Scope (Web Applications-এর জন্য)
  6. Application Scope (Web Applications-এর জন্য)

১. Singleton Scope

Singleton Scope হল Spring Bean-এর ডিফল্ট স্কোপ। এর মানে হল যে Spring Container শুধুমাত্র একটি Bean ইনস্ট্যান্স তৈরি করে এবং এই এক ইনস্ট্যান্সটি পুরো অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়। যেকোনো জায়গা থেকে সেই Bean ব্যবহার করা হলে একই ইনস্ট্যান্স রিটার্ন হয়। এটি মেমরি ব্যবস্থাপনার দিক থেকে কার্যকর, কারণ একটাই Bean তৈরি হচ্ছে।

উদাহরণ:

import org.springframework.stereotype.Component;

@Component
public class SingletonBean {

    public SingletonBean() {
        System.out.println("Singleton Bean Created!");
    }

    public void showMessage() {
        System.out.println("This is a Singleton Bean!");
    }
}

এখানে SingletonBean একটি Singleton Bean। Spring Container এই Bean-এর একটি মাত্র ইনস্ট্যান্স তৈরি করবে এবং অ্যাপ্লিকেশন জুড়ে ব্যবহার করবে।


২. Prototype Scope

Prototype Scope ব্যবহৃত হলে Spring Container প্রতি আবেদন (request) এর জন্য নতুন Bean ইনস্ট্যান্স তৈরি করে। এটি নিশ্চিত করে যে, প্রতিটি Bean এর জন্য নতুন ইনস্ট্যান্স তৈরি হবে। যদি Bean-টি Prototype স্কোপে থাকে, তাহলে ডিপেনডেন্সি ইনজেকশন (DI) চালু হলে প্রতি বার সেই Bean এর একটি আলাদা ইনস্ট্যান্স তৈরি হবে।

উদাহরণ:

import org.springframework.stereotype.Component;

@Component
public class PrototypeBean {

    public PrototypeBean() {
        System.out.println("Prototype Bean Created!");
    }

    public void showMessage() {
        System.out.println("This is a Prototype Bean!");
    }
}

এখানে PrototypeBean একটি Prototype Bean। প্রতি বার PrototypeBean Bean রিটার্ন করলে Spring Container নতুন একটি ইনস্ট্যান্স তৈরি করবে।


৩. Request Scope

Request Scope শুধু Web Applications-এ ব্যবহৃত হয়। যখন Spring Bean কে request স্কোপে ডিফাইন করা হয়, তখন প্রতিটি HTTP রিকোয়েস্টের জন্য একটি নতুন Bean ইনস্ট্যান্স তৈরি হয়। এটি শুধুমাত্র HTTP রিকোয়েস্টের মধ্যে জীবিত থাকে এবং রিকোয়েস্টের শেষে Bean ইনস্ট্যান্সটি ধ্বংস হয়ে যায়।

উদাহরণ:

import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.RequestScope;

@Component
@RequestScope
public class RequestBean {

    public RequestBean() {
        System.out.println("Request Bean Created!");
    }

    public void showMessage() {
        System.out.println("This is a Request Scoped Bean!");
    }
}

এখানে RequestBean একটি Request Scoped Bean। প্রতি HTTP রিকোয়েস্টে এই Bean এর নতুন ইনস্ট্যান্স তৈরি হবে এবং রিকোয়েস্ট শেষে Bean ধ্বংস হবে।


৪. Session Scope

Session Scope হল একটি Web Bean স্কোপ, যা HTTP সেশন অনুযায়ী কাজ করে। যখন কোনো Bean session স্কোপে থাকে, তখন সেটি শুধু একটি HTTP সেশনজুড়ে জীবিত থাকে। এটি ব্যবহারকারী বা ক্লায়েন্টের সেশন তথ্য স্টোর করার জন্য উপকারী, যেমন লগইন তথ্য।

উদাহরণ:

import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.SessionScope;

@Component
@SessionScope
public class SessionBean {

    public SessionBean() {
        System.out.println("Session Bean Created!");
    }

    public void showMessage() {
        System.out.println("This is a Session Scoped Bean!");
    }
}

এখানে SessionBean একটি Session Scoped Bean। প্রতি HTTP সেশনে একাধিক রিকোয়েস্টের জন্য একই Bean ইনস্ট্যান্স ব্যবহার হবে এবং সেশন শেষ হলে Bean ধ্বংস হবে।


৫. GlobalSession Scope

GlobalSession Scope একটি Web Bean স্কোপ যা একটি বৈশ্বিক সেশনে কাজ করে। এটি সাধারণত Portlet-based Web Applications-এ ব্যবহৃত হয়, যেখানে একটি Session ব্যাপী গ্লোবাল ডেটা শেয়ার করা যায়।

উদাহরণ:

import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.SessionScope;

@Component
public class GlobalSessionBean {

    public GlobalSessionBean() {
        System.out.println("Global Session Bean Created!");
    }

    public void showMessage() {
        System.out.println("This is a Global Session Scoped Bean!");
    }
}

এখানে GlobalSessionBean একটি Global Session Scoped Bean, যা শুধুমাত্র Portlet-based Web Application এ ব্যবহৃত হয়।


৬. Application Scope

Application Scope হল একটি Web Bean স্কোপ যা Spring ApplicationContext-এর জীবনকাল পর্যন্ত কার্যকর থাকে। এটি Spring Bean এর ইনস্ট্যান্সকে পুরো অ্যাপ্লিকেশন জুড়ে ব্যবহারযোগ্য করে তোলে।

উদাহরণ:

import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.ApplicationScope;

@Component
@ApplicationScope
public class ApplicationBean {

    public ApplicationBean() {
        System.out.println("Application Bean Created!");
    }

    public void showMessage() {
        System.out.println("This is an Application Scoped Bean!");
    }
}

এখানে ApplicationBean একটি Application Scoped Bean, যা Spring ApplicationContext-এর জীবনকাল পর্যন্ত সারা অ্যাপ্লিকেশন জুড়ে ব্যবহার করা যায়।


Bean Scope কেন গুরুত্বপূর্ণ?

  1. মেমরি ব্যবস্থাপনা:
    • Singleton Scope মেমরি ব্যবস্থাপনায় কার্যকর, কারণ এটি Spring Container-এ একটি মাত্র ইনস্ট্যান্স তৈরি করে।
    • Prototype Scope ব্যবহৃত হলে, মেমরি বেশি ব্যবহার হবে কারণ প্রতি বার নতুন ইনস্ট্যান্স তৈরি করা হয়।
  2. পারফরম্যান্স:
    • Singleton Beans ব্যবহার করলে পারফরম্যান্স উন্নত হয়, কারণ এটি Bean-এর ইনস্ট্যান্স পুনরায় ব্যবহার করে।
    • তবে Prototype Beans বা Request/Session স্কোপ ব্যবহার করলে অ্যাপ্লিকেশনটির পারফরম্যান্সে কিছুটা প্রভাব পড়তে পারে, কারণ প্রতিবার নতুন ইনস্ট্যান্স তৈরি করতে হয়।
  3. ডিপেনডেন্সি ম্যানেজমেন্ট:
    • Bean Scope এর মাধ্যমে ডিপেনডেন্সি ইনজেকশন কিভাবে পরিচালিত হবে তা নির্ধারণ করা হয়। যদি একটি Bean-এর স্কোপ সঠিকভাবে নির্বাচন না করা হয়, তবে অ্যাপ্লিকেশন সঠিকভাবে কাজ নাও করতে পারে।
  4. বিশেষ ব্যবহারের ক্ষেত্রে উপকারী:
    • Request Scope এবং Session Scope Web Applications-এ ব্যবহারকারী সেশনের জন্য নির্দিষ্ট ডেটা সংরক্ষণ এবং তার ভিত্তিতে নির্দিষ্ট অ্যাক্সেস প্রদান করার জন্য উপকারী।
    • Application Scope এবং GlobalSession Scope বৃহৎ অ্যাপ্লিকেশনগুলির জন্য কার্যকর, যেখানে সমস্ত ইউজারের জন্য গ্লোবাল ডেটা প্রয়োজন।

উপসংহার

Spring Bean Scope Spring Framework-এর একটি গুরুত্বপূর্ণ অংশ যা Bean গুলির জীবনকাল এবং ব্যবহারের পরিসীমা নিয়ন্ত্রণ করে। এটি Spring Dependency Injection এর সাথে যুক্ত হয়ে অ্যাপ্লিকেশনের কার্যকারিতা, মেমরি ব্যবস্থাপনা এবং পারফরম্যান্সে গুরুত্বপূর্ণ ভূমিকা পালন করে। Bean Scope নির্বাচন অ্যাপ্লিকেশনের সঠিক আচরণ নিশ্চিত করার জন্য অপরিহার্য এবং এটি ডিপেনডেন্সি ইনজেকশন ব্যবস্থাপনাকে আরও কার্যকর এবং দক্ষ করে তোলে।

Content added By

স্প্রিং ডিপেনডেন্সি ইনজেকশন (Spring Dependency Injection বা DI) স্প্রিং ফ্রেমওয়ার্কে একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা আপনাকে অ্যাপ্লিকেশন কনফিগারেশন এবং ইনজেকশন ম্যানেজ করতে সহায়তা করে। স্প্রিংে Bean Scope এর ধরনগুলি ব্যবহারকারীর চাহিদা অনুযায়ী বিন্ন (Bean) তৈরি এবং পরিচালনা করার পদ্ধতি নির্ধারণ করে। স্প্রিং ফ্রেমওয়ার্কে বিভিন্ন Bean Scope নির্ধারণ করে, যার মাধ্যমে স্প্রিং কনটেইনার বিয়ান তৈরি করে এবং সেই বিয়ানগুলি কীভাবে ব্যবহৃত হবে তা নিয়ন্ত্রণ করে।


Bean Scope এর ধরন

স্প্রিং ফ্রেমওয়ার্কে সাধারণত পাঁচটি প্রধান Bean Scope ব্যবহার করা হয়:

১. Singleton Scope

Singleton scope (ডিফল্ট স্কোপ) হল সবচেয়ে প্রচলিত এবং সাধারণ স্কোপ। যখন একটি বিয়ানকে singleton হিসাবে কনফিগার করা হয়, তখন স্প্রিং কনটেইনার সেই বিয়ানটির মাত্র একটি একক ইনস্ট্যান্স তৈরি করে এবং তা সার্ভিস লাইফটাইমের জন্য পুনরায় ব্যবহার হয়। অন্য কথায়, একবার তৈরি হওয়া বিয়ানটি প্রতিটি ক্লায়েন্টের জন্য শেয়ার করা হয়।

উদাহরণ:

@Component
public class Car {
    public void drive() {
        System.out.println("Car is driving...");
    }
}

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

<bean id="car" class="com.example.Car" scope="singleton"/>

এখানে, Car বিয়ানটি কনটেইনারের মধ্যে singleton হিসাবে তৈরি হবে, এবং যতবারই এই বিয়ানটি প্রয়োজন হবে, এটি কেবল একবার তৈরি হবে এবং পুনরায় ব্যবহৃত হবে।

সুবিধা:

  • Memory Efficiency: একমাত্র ইনস্ট্যান্স রিইউজ করার কারণে মেমরি ব্যবহার কম হয়।
  • Performance: একবার ইনস্ট্যান্স তৈরি হওয়ার পর তা বারবার ব্যবহৃত হওয়ায় পারফরম্যান্স বাড়ে।

২. Prototype Scope

Prototype scope-এ স্প্রিং কনটেইনার প্রতিটি বিয়ান চাহিদা অনুযায়ী নতুন একটি ইনস্ট্যান্স তৈরি করে। এর মানে হলো, যখনই একটি বিয়ানকে prototype হিসাবে ডিফাইন করা হয়, তখন প্রতিবার ইনজেকশন বা রেফারেন্সের জন্য এটি একটি নতুন ইনস্ট্যান্স তৈরি করবে।

উদাহরণ:

@Component
public class Bike {
    public void ride() {
        System.out.println("Bike is riding...");
    }
}

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

<bean id="bike" class="com.example.Bike" scope="prototype"/>

এখানে, Bike বিয়ানটি প্রতিবার নতুন ইনস্ট্যান্স তৈরি করবে যখনই এটি প্রয়োজন হবে।

সুবিধা:

  • Independence: প্রতিটি বিয়ান ইনস্ট্যান্স আলাদা থাকে, তাই এটি একে অপরের থেকে স্বাধীনভাবে কাজ করে।
  • Flexibility: পরিবর্তনশীল অবস্থা বা কাস্টম অবস্থা প্রয়োজন হলে উপযুক্ত।

৩. Request Scope

Request scope-এ স্প্রিং কনটেইনার একে অপরের থেকে আলাদা HTTP রিকোয়েস্টের জন্য নতুন বিয়ান ইনস্ট্যান্স তৈরি করে। এটি সাধারণত ওয়েব অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয় যেখানে প্রতি HTTP রিকোয়েস্টে আলাদা বিয়ান প্রয়োজন হয়।

উদাহরণ:

@Component
@Scope("request")
public class UserRequest {
    public void printRequestInfo() {
        System.out.println("User request information...");
    }
}

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

<bean id="userRequest" class="com.example.UserRequest" scope="request"/>

এখানে, UserRequest বিয়ানটি প্রতিটি HTTP রিকোয়েস্টের জন্য আলাদা ইনস্ট্যান্স তৈরি করবে।

সুবিধা:

  • Request-Specific Data: প্রতি রিকোয়েস্টের জন্য নতুন ইনস্ট্যান্স তৈরি হওয়ার কারণে, রিকোয়েস্টের সাথে সম্পর্কিত তথ্য আলাদা রাখা যায়।

৪. Session Scope

Session scope-এ স্প্রিং কনটেইনার একে অপরের থেকে আলাদা HTTP সেশনগুলির জন্য নতুন বিয়ান ইনস্ট্যান্স তৈরি করে। এটি ওয়েব অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয় যেখানে প্রতিটি ব্যবহারকারীর HTTP সেশনের জন্য আলাদা বিয়ান রাখা প্রয়োজন।

উদাহরণ:

@Component
@Scope("session")
public class UserSession {
    public void printSessionInfo() {
        System.out.println("User session information...");
    }
}

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

<bean id="userSession" class="com.example.UserSession" scope="session"/>

এখানে, UserSession বিয়ানটি প্রতিটি HTTP সেশনের জন্য আলাদা ইনস্ট্যান্স তৈরি করবে।

সুবিধা:

  • Session-Specific Data: ব্যবহারকারীর সেশন অনুযায়ী তথ্য ম্যানেজ করা সম্ভব।

৫. Global Session Scope

Global Session scope-এ স্প্রিং কনটেইনার HTTP সেশনের মধ্যে গ্লোবাল সেশন প্রয়োজনীয় তথ্য রাখে। এটি মূলত portlet অ্যাপ্লিকেশনে ব্যবহৃত হয় এবং এটি একটি বৃহত্তর স্কোপ প্রদান করে যেখানে তথ্য একাধিক সেশনে শেয়ার করা হয়।

উদাহরণ:

@Component
@Scope("globalSession")
public class GlobalUserSession {
    public void printGlobalSessionInfo() {
        System.out.println("Global user session information...");
    }
}

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

<bean id="globalUserSession" class="com.example.GlobalUserSession" scope="globalSession"/>

এখানে, GlobalUserSession বিয়ানটি গ্লোবাল সেশন তথ্য অনুযায়ী তৈরি হবে।

সুবিধা:

  • Multiple Portlets: এটি মূলত portlet অ্যাপ্লিকেশনে ব্যবহৃত হয়, যেখানে একাধিক সেশন শেয়ার করতে হয়।

সারাংশ

স্প্রিং ফ্রেমওয়ার্কে Bean Scope বিভিন্ন অ্যাপ্লিকেশন আর্কিটেকচারের প্রয়োজন অনুযায়ী বিয়ান পরিচালনা করে। Singleton স্কোপের মাধ্যমে একক ইনস্ট্যান্স তৈরি হয়, Prototype স্কোপে প্রতিবার নতুন ইনস্ট্যান্স তৈরি হয়, Request এবং Session স্কোপ ওয়েব অ্যাপ্লিকেশনে HTTP রিকোয়েস্ট এবং সেশনের জন্য বিয়ান তৈরি করে, এবং Global Session স্কোপ ব্যবহার করা হয় বিশেষভাবে portlet অ্যাপ্লিকেশনে। এই স্কোপগুলি স্প্রিং কনটেইনারের মধ্যে বিয়ানগুলির জীবনকাল এবং ব্যবহারের পদ্ধতি নিয়ন্ত্রণ করে, যা অ্যাপ্লিকেশনের কার্যকারিতা এবং কর্মক্ষমতা উন্নত করতে সাহায্য করে।

Content added By

Bean Scope স্প্রিং ফ্রেমওয়ার্কে একটি গুরুত্বপূর্ণ ধারণা যা নির্ধারণ করে একটি Bean এর জীবনচক্র (lifecycle) কিভাবে পরিচালিত হবে। স্প্রিং কনটেইনারে তৈরি হওয়া Beans সাধারণত কয়েকটি আলাদা স্কোপে থাকতে পারে, যা নির্ধারণ করে যে সেই Bean কিভাবে তৈরি হবে এবং কখন ধ্বংস হবে। স্প্রিং ডিপেনডেন্সি ইনজেকশন (DI) ব্যবহারের সময়, Bean Scope কনফিগার করার মাধ্যমে আপনি আপনার Bean-এর জীবনচক্র নিয়ন্ত্রণ করতে পারেন।

স্প্রিং-এর মধ্যে বিভিন্ন ধরনের Bean Scope রয়েছে। এগুলোর মধ্যে সবচেয়ে সাধারণ এবং ব্যবহৃত স্কোপগুলো হলো:

  1. Singleton Scope
  2. Prototype Scope
  3. Request Scope
  4. Session Scope
  5. Global Session Scope

1. Singleton Scope

Singleton Scope হল স্প্রিং-এর ডিফল্ট স্কোপ, যার মানে হল যে কনটেইনারের মধ্যে একটি Bean-এর মাত্র একটি ইনস্ট্যান্স তৈরি হয় এবং পুরো অ্যাপ্লিকেশনে সেই এক ইনস্ট্যান্স ব্যবহার করা হয়।

উদাহরণ: Singleton Scope

import org.springframework.stereotype.Component;

@Component
public class SingletonBean {
    public SingletonBean() {
        System.out.println("Singleton Bean Created");
    }

    public void showMessage() {
        System.out.println("Hello from Singleton Bean!");
    }
}

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

<bean id="singletonBean" class="com.example.SingletonBean" scope="singleton"/>

ব্যাখ্যা:
এই Bean এর একমাত্র ইনস্ট্যান্স কনটেইনার তৈরি করার সময় তৈরি হবে এবং পুরো অ্যাপ্লিকেশনে এই এক ইনস্ট্যান্স ব্যবহার হবে।

Java Configuration:

@Configuration
@ComponentScan("com.example")
public class AppConfig {
    @Bean
    public SingletonBean singletonBean() {
        return new SingletonBean();
    }
}

ফলস্বরূপ:
এই Bean একবার তৈরি হবে এবং পরবর্তীতে একাধিক ক্লাস বা প্রয়োজনে পুনরায় ব্যবহার করা হবে।


2. Prototype Scope

Prototype Scope ব্যবহার করলে স্প্রিং কনটেইনার প্রতি নতুন অনুরোধে একটি নতুন Bean ইনস্ট্যান্স তৈরি করবে। অর্থাৎ, প্রতিবার যখন Bean প্রয়োজন হবে, তখন নতুন একটি ইনস্ট্যান্স তৈরি হবে।

উদাহরণ: Prototype Scope

import org.springframework.stereotype.Component;

@Component
public class PrototypeBean {
    public PrototypeBean() {
        System.out.println("Prototype Bean Created");
    }

    public void showMessage() {
        System.out.println("Hello from Prototype Bean!");
    }
}

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

<bean id="prototypeBean" class="com.example.PrototypeBean" scope="prototype"/>

ব্যাখ্যা:
প্রতিবার একটি নতুন ইনস্ট্যান্স তৈরি হবে, যেটি কোনো পূর্ববর্তী ইনস্ট্যান্সের সাথে শেয়ার করা হবে না।

Java Configuration:

@Configuration
@ComponentScan("com.example")
public class AppConfig {
    @Bean
    public PrototypeBean prototypeBean() {
        return new PrototypeBean();
    }
}

ফলস্বরূপ:
যতবার PrototypeBean এর জন্য কনটেইনারের কাছে অনুরোধ আসবে, ততবার একটি নতুন ইনস্ট্যান্স তৈরি হবে।


3. Request Scope

Request Scope হল একটি বিশেষ ধরনের স্কোপ যা সাধারণত ওয়েব অ্যাপ্লিকেশনে ব্যবহৃত হয়। এর মাধ্যমে একটি Bean প্রতি HTTP রিকোয়েস্টে একটি নতুন ইনস্ট্যান্স তৈরি হয়।

উদাহরণ: Request Scope

import org.springframework.stereotype.Component;

@Component
@Scope("request")
public class RequestBean {
    public RequestBean() {
        System.out.println("Request Bean Created");
    }

    public void showMessage() {
        System.out.println("Hello from Request Scoped Bean!");
    }
}

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

<bean id="requestBean" class="com.example.RequestBean" scope="request"/>

ব্যাখ্যা:
এই Bean শুধুমাত্র একটি HTTP রিকোয়েস্টের জন্য তৈরি হবে এবং সেই রিকোয়েস্টের পরে Bean ধ্বংস হবে।

Java Configuration:

@Configuration
@ComponentScan("com.example")
public class AppConfig {
    @Bean
    @Scope("request")
    public RequestBean requestBean() {
        return new RequestBean();
    }
}

ফলস্বরূপ:
প্রতি HTTP রিকোয়েস্টে নতুন ইনস্ট্যান্স তৈরি হবে।


4. Session Scope

Session Scope হল একটি ওয়েব অ্যাপ্লিকেশন স্কোপ যেখানে একটি Bean প্রতি HTTP সেশনে একটি ইনস্ট্যান্স তৈরি হয়। এই Bean সেশনটির মধ্যে শেয়ার করা হয় এবং সেশন শেষ হলে Bean ধ্বংস হয়ে যায়।

উদাহরণ: Session Scope

import org.springframework.stereotype.Component;

@Component
@Scope("session")
public class SessionBean {
    public SessionBean() {
        System.out.println("Session Bean Created");
    }

    public void showMessage() {
        System.out.println("Hello from Session Scoped Bean!");
    }
}

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

<bean id="sessionBean" class="com.example.SessionBean" scope="session"/>

ব্যাখ্যা:
এই Bean প্রতিটি HTTP সেশনের জন্য নতুন একটি ইনস্ট্যান্স তৈরি হবে এবং সেশন শেষ হওয়ার পরে সেই ইনস্ট্যান্স ধ্বংস হবে।

Java Configuration:

@Configuration
@ComponentScan("com.example")
public class AppConfig {
    @Bean
    @Scope("session")
    public SessionBean sessionBean() {
        return new SessionBean();
    }
}

ফলস্বরূপ:
প্রতিটি HTTP সেশন জন্য একটি নতুন ইনস্ট্যান্স তৈরি হবে।


5. Global Session Scope

Global Session Scope সাধারণত পোর্টল বা মল্টি-অ্যাপ্লিকেশন পরিবেশে ব্যবহৃত হয়, যেখানে একটি Bean গ্লোবাল HTTP সেশনের জন্য একটি ইনস্ট্যান্স তৈরি হয় এবং পুরো অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়।

উদাহরণ: Global Session Scope

import org.springframework.stereotype.Component;

@Component
@Scope("globalSession")
public class GlobalSessionBean {
    public GlobalSessionBean() {
        System.out.println("Global Session Bean Created");
    }

    public void showMessage() {
        System.out.println("Hello from Global Session Scoped Bean!");
    }
}

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

<bean id="globalSessionBean" class="com.example.GlobalSessionBean" scope="globalSession"/>

ব্যাখ্যা:
এই Bean গ্লোবাল HTTP সেশনের জন্য একমাত্র ইনস্ট্যান্স তৈরি হয় এবং পুরো অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয়।

Java Configuration:

@Configuration
@ComponentScan("com.example")
public class AppConfig {
    @Bean
    @Scope("globalSession")
    public GlobalSessionBean globalSessionBean() {
        return new GlobalSessionBean();
    }
}

ফলস্বরূপ:
এই Bean গ্লোবাল সেশন পর্যন্ত জীবিত থাকবে এবং পুরো অ্যাপ্লিকেশন জুড়ে একাধিক ইউজার বা রিকোয়েস্টে শেয়ার করা হবে।


Bean Scope এর তুলনা

ScopeDescriptionLifecycle
Singletonএকক ইনস্ট্যান্স, পুরো অ্যাপ্লিকেশন জুড়ে একমাত্র Bean।Application context এর জীবন্তকাল
Prototypeপ্রতি রিকোয়েস্টে নতুন ইনস্ট্যান্স তৈরি হয়।Bean প্রতি রিকোয়েস্টে তৈরি হয়
Requestপ্রতি HTTP রিকোয়েস্টে নতুন Bean তৈরি হয়।Request scope এর সময়কাল
Sessionপ্রতি HTTP সেশনে নতুন Bean তৈরি হয়।Session scope এর সময়কাল
Global Sessionগ্লোবাল সেশনের জন্য Bean তৈরি হয়।Global session scope এর সময়কাল

উপসংহার

Bean Scope স্প্রিং কনটেইনারে Beans এর জীবনচক্র এবং ব্যবহারকে নিয়ন্ত্রণ করে। Singleton, Prototype, Request, Session, এবং Global Session এই পাঁচটি সাধারণ স্কোপ ব্যবহৃত হয় এবং প্রত্যেকটির নিজস্ব ব্যবহার এবং সময়কাল রয়েছে। স্প্রিং ফ্রেমওয়ার্কে ডিপেনডেন্সি ইনজেকশন ব্যবহারের মাধ্যমে এই স্কোপ গুলো কনফিগার করা যায় এবং অ্যাপ্লিকেশনের কার্যকারিতা ও পারফরম্যান্স উন্নত করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...