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 তিনটি প্রধান ধারণায় বিভক্ত:
- Singleton Scope
- Prototype Scope
- Request Scope (Web Applications-এর জন্য)
- Session Scope (Web Applications-এর জন্য)
- GlobalSession Scope (Web Applications-এর জন্য)
- 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 কেন গুরুত্বপূর্ণ?
- মেমরি ব্যবস্থাপনা:
- Singleton Scope মেমরি ব্যবস্থাপনায় কার্যকর, কারণ এটি Spring Container-এ একটি মাত্র ইনস্ট্যান্স তৈরি করে।
- Prototype Scope ব্যবহৃত হলে, মেমরি বেশি ব্যবহার হবে কারণ প্রতি বার নতুন ইনস্ট্যান্স তৈরি করা হয়।
- পারফরম্যান্স:
- Singleton Beans ব্যবহার করলে পারফরম্যান্স উন্নত হয়, কারণ এটি Bean-এর ইনস্ট্যান্স পুনরায় ব্যবহার করে।
- তবে Prototype Beans বা Request/Session স্কোপ ব্যবহার করলে অ্যাপ্লিকেশনটির পারফরম্যান্সে কিছুটা প্রভাব পড়তে পারে, কারণ প্রতিবার নতুন ইনস্ট্যান্স তৈরি করতে হয়।
- ডিপেনডেন্সি ম্যানেজমেন্ট:
- Bean Scope এর মাধ্যমে ডিপেনডেন্সি ইনজেকশন কিভাবে পরিচালিত হবে তা নির্ধারণ করা হয়। যদি একটি Bean-এর স্কোপ সঠিকভাবে নির্বাচন না করা হয়, তবে অ্যাপ্লিকেশন সঠিকভাবে কাজ নাও করতে পারে।
- বিশেষ ব্যবহারের ক্ষেত্রে উপকারী:
- Request Scope এবং Session Scope Web Applications-এ ব্যবহারকারী সেশনের জন্য নির্দিষ্ট ডেটা সংরক্ষণ এবং তার ভিত্তিতে নির্দিষ্ট অ্যাক্সেস প্রদান করার জন্য উপকারী।
- Application Scope এবং GlobalSession Scope বৃহৎ অ্যাপ্লিকেশনগুলির জন্য কার্যকর, যেখানে সমস্ত ইউজারের জন্য গ্লোবাল ডেটা প্রয়োজন।
উপসংহার
Spring Bean Scope Spring Framework-এর একটি গুরুত্বপূর্ণ অংশ যা Bean গুলির জীবনকাল এবং ব্যবহারের পরিসীমা নিয়ন্ত্রণ করে। এটি Spring Dependency Injection এর সাথে যুক্ত হয়ে অ্যাপ্লিকেশনের কার্যকারিতা, মেমরি ব্যবস্থাপনা এবং পারফরম্যান্সে গুরুত্বপূর্ণ ভূমিকা পালন করে। Bean Scope নির্বাচন অ্যাপ্লিকেশনের সঠিক আচরণ নিশ্চিত করার জন্য অপরিহার্য এবং এটি ডিপেনডেন্সি ইনজেকশন ব্যবস্থাপনাকে আরও কার্যকর এবং দক্ষ করে তোলে।
Read more