Guice Dependency Injection Framework এ Request Scope এবং Singleton Scope দুটি ভিন্ন ধরনের সিঙ্গলটন স্কোপ রয়েছে। এই স্কোপ দুটি ডিপেন্ডেন্সির জীবনকাল (lifetime) এবং ইনস্ট্যান্স তৈরির কৌশলে পার্থক্য রাখে।
1. Singleton Scope
Singleton Scope এমন একটি স্কোপ যেখানে অবজেক্টটি পুরো অ্যাপ্লিকেশন চলাকালীন একবার তৈরি হয় এবং সমস্ত রিকোয়েস্টের জন্য একই ইনস্ট্যান্স ব্যবহার করা হয়। এর মানে হল যে, একবার একটি অবজেক্ট তৈরি হলে সেটি পুনরায় ব্যবহার করা হবে যতবারই প্রয়োজন হোক না কেন।
Key Features of Singleton Scope:
- একটি ইনস্ট্যান্স: অ্যাপ্লিকেশন চলাকালীন শুধুমাত্র একবার ইনস্ট্যান্স তৈরি হয়।
- Global Instance: সমস্ত ক্লাস বা রিকোয়েস্ট একই ইনস্ট্যান্স ব্যবহার করে।
- Performance: দ্রুত, কারণ একবার ইনস্ট্যান্স তৈরি হলে পুনরায় সেটি তৈরি করতে হয় না।
- Memory Usage: একটি ইনস্ট্যান্সের জন্য সবসময় মেমরি থাকে, যা কখনও কখনও অপ্রয়োজনীয় রিসোর্স খরচ হতে পারে।
Usage Example:
import com.google.inject.AbstractModule;
import com.google.inject.Singleton;
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(Service.class).in(Singleton.class); // Singleton Scope
}
}
public class Service {
public Service() {
System.out.println("Service Created");
}
public void execute() {
System.out.println("Executing service");
}
}
এখানে, Service ক্লাসে Singleton Scope ব্যবহার করা হয়েছে, যার মানে এটি শুধুমাত্র একবার তৈরি হবে এবং সব জায়গায় একই ইনস্ট্যান্স ব্যবহার হবে।
2. Request Scope
Request Scope হল এমন একটি স্কোপ যেখানে অবজেক্টটি একটি নির্দিষ্ট HTTP রিকোয়েস্টের জন্য তৈরি হয় এবং রিকোয়েস্টের শেষে সেটি ধ্বংস হয়ে যায়। এটি সাধারণত ওয়েব অ্যাপ্লিকেশনে ব্যবহৃত হয় যেখানে একটি রিকোয়েস্টের জন্য আলাদা অবজেক্ট তৈরি করতে হয়, এবং সেই অবজেক্টটি পরবর্তী রিকোয়েস্টে পুনরায় ব্যবহৃত হয় না।
Key Features of Request Scope:
- One Instance Per Request: প্রতিটি HTTP রিকোয়েস্টের জন্য আলাদা ইনস্ট্যান্স তৈরি হয়।
- Scope Bound to Request Lifetime: অবজেক্টটি শুধুমাত্র একটি রিকোয়েস্টের জন্য জীবিত থাকে এবং রিকোয়েস্ট শেষ হলে ধ্বংস হয়ে যায়।
- Memory Efficiency: প্রতিটি রিকোয়েস্টের জন্য একটি নতুন ইনস্ট্যান্স তৈরি হয়, যা যেকোনো কনটেক্সটে প্রয়োজনীয় ডেটা রাখতে সহায়ক হতে পারে।
- Usage: ওয়েব অ্যাপ্লিকেশন বা REST API ইত্যাদিতে সাধারণত ব্যবহৃত হয়।
Usage Example (Request Scope):
import com.google.inject.AbstractModule;
import com.google.inject.Scope;
import com.google.inject.servlet.RequestScoped;
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(Service.class).in(RequestScoped.class); // Request Scope
}
}
@RequestScoped
public class Service {
public Service() {
System.out.println("Service Created for Request");
}
public void execute() {
System.out.println("Executing service");
}
}
এখানে, Service ক্লাসের জন্য Request Scope ব্যবহার করা হয়েছে। এর মানে হল যে, প্রতিটি HTTP রিকোয়েস্টের জন্য আলাদা ইনস্ট্যান্স তৈরি হবে এবং সেই রিকোয়েস্ট শেষ হলে তা ধ্বংস হয়ে যাবে।
পার্থক্য: Singleton Scope vs Request Scope
| বৈশিষ্ট্য | Singleton Scope | Request Scope |
|---|---|---|
| ইনস্ট্যান্স তৈরি | একবার তৈরি হয় এবং অ্যাপ্লিকেশন চলাকালীন পুনরায় ব্যবহার করা হয়। | প্রতি HTTP রিকোয়েস্টের জন্য আলাদা ইনস্ট্যান্স তৈরি হয়। |
| লাইফটাইম | অ্যাপ্লিকেশন লাইফটাইম পর্যন্ত। | শুধুমাত্র একটি HTTP রিকোয়েস্টের জন্য। |
| রিসোর্স ব্যবস্থাপনা | সব রিকোয়েস্ট একই ইনস্ট্যান্স ব্যবহার করে, কম রিসোর্স ব্যবহার হয়। | নতুন ইনস্ট্যান্স তৈরি হয়, রিসোর্স কিছুটা বেশি হতে পারে। |
| ব্যবহার | যেসব ডেটা অ্যাপ্লিকেশন জুড়ে শেয়ার করা হয় (যেমন ক্যাশিং)। | যেসব ডেটা একটি নির্দিষ্ট রিকোয়েস্টের মধ্যে ব্যবহৃত হয়। |
| উদাহরণ | একক সার্ভিস ক্লাস বা ডেটাবেস কানেকশন। | HTTP রিকোয়েস্ট বা ওয়েব সার্ভিসের জন্য ডিপেন্ডেন্সি। |
- Singleton Scope ব্যবহৃত হয় এমন অবজেক্টের জন্য যেগুলি অ্যাপ্লিকেশন জীবনের মধ্যে একাধিকবার ব্যবহার করা হয়, এবং একবার তৈরি হলে সেগুলি পুনরায় তৈরি করার প্রয়োজন পড়ে না।
- Request Scope সাধারণত HTTP রিকোয়েস্ট-ভিত্তিক অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়, যেখানে প্রতি রিকোয়েস্টের জন্য নতুন ইনস্ট্যান্স তৈরি হয় এবং রিকোয়েস্টের শেষে এটি ধ্বংস হয়ে যায়।
আপনি যে ধরনের স্কোপ ব্যবহার করবেন তা নির্ভর করে আপনার অ্যাপ্লিকেশনের প্রয়োজনীয়তার উপর। যদি একটি সার্ভিস বা ডেটাবেস কানেকশন অ্যাপ্লিকেশনজুড়ে শেয়ার করতে চান তবে Singleton Scope হবে সঠিক পছন্দ। তবে যদি আপনার অবজেক্টটি শুধুমাত্র একটি নির্দিষ্ট HTTP রিকোয়েস্টের জন্য প্রয়োজন হয়, তবে Request Scope ব্যবহার করা উচিত।
Read more