Bean Scope স্প্রিং ফ্রেমওয়ার্কে একটি গুরুত্বপূর্ণ ধারণা যা নির্ধারণ করে একটি Bean এর জীবনচক্র (lifecycle) কিভাবে পরিচালিত হবে। স্প্রিং কনটেইনারে তৈরি হওয়া Beans সাধারণত কয়েকটি আলাদা স্কোপে থাকতে পারে, যা নির্ধারণ করে যে সেই Bean কিভাবে তৈরি হবে এবং কখন ধ্বংস হবে। স্প্রিং ডিপেনডেন্সি ইনজেকশন (DI) ব্যবহারের সময়, Bean Scope কনফিগার করার মাধ্যমে আপনি আপনার Bean-এর জীবনচক্র নিয়ন্ত্রণ করতে পারেন।
স্প্রিং-এর মধ্যে বিভিন্ন ধরনের Bean Scope রয়েছে। এগুলোর মধ্যে সবচেয়ে সাধারণ এবং ব্যবহৃত স্কোপগুলো হলো:
- Singleton Scope
- Prototype Scope
- Request Scope
- Session Scope
- 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 এর তুলনা
| Scope | Description | Lifecycle |
|---|---|---|
| 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 এই পাঁচটি সাধারণ স্কোপ ব্যবহৃত হয় এবং প্রত্যেকটির নিজস্ব ব্যবহার এবং সময়কাল রয়েছে। স্প্রিং ফ্রেমওয়ার্কে ডিপেনডেন্সি ইনজেকশন ব্যবহারের মাধ্যমে এই স্কোপ গুলো কনফিগার করা যায় এবং অ্যাপ্লিকেশনের কার্যকারিতা ও পারফরম্যান্স উন্নত করা সম্ভব।
Read more