স্প্রিং ডিপেনডেন্সি ইনজেকশন (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 অ্যাপ্লিকেশনে। এই স্কোপগুলি স্প্রিং কনটেইনারের মধ্যে বিয়ানগুলির জীবনকাল এবং ব্যবহারের পদ্ধতি নিয়ন্ত্রণ করে, যা অ্যাপ্লিকেশনের কার্যকারিতা এবং কর্মক্ষমতা উন্নত করতে সাহায্য করে।
Read more