Guice-এ Request Scope ব্যবস্থাপনা করার মাধ্যমে, আপনি নিশ্চিত করতে পারেন যে একটি নির্দিষ্ট HTTP রিকোয়েস্টে কেবল একটি ইনস্ট্যান্স তৈরি হবে, যা রিকোয়েস্টের জীবনকাল জুড়ে থাকবে। Guice-এ Request Scope ব্যবস্থাপনা সাধারণত Servlets বা JAX-RS (RESTful Web Services) এর মাধ্যমে করা হয়, যেখানে প্রতি HTTP রিকোয়েস্টের জন্য একটি পৃথক ইনস্ট্যান্স তৈরি করা হয়।
Guice-এ Request Scope ব্যবস্থাপনা করার জন্য আপনাকে @RequestScope অ্যানোটেশন ব্যবহার করতে হবে অথবা Guice এর Scope API ব্যবহার করতে হবে। এটি সাধারণত ওয়েব অ্যাপ্লিকেশন, যেখানে HTTP রিকোয়েস্টের জন্য আলাদা ইনস্ট্যান্সের প্রয়োজন, সেখানে ব্যবহৃত হয়।
Guice Request Scope ব্যবস্থাপনা
1. Guice Request Scope কনফিগারেশন
Guice-এ Request Scope ব্যবস্থাপনা করতে, আপনাকে Guice Injector-এ @RequestScope অ্যানোটেশন ব্যবহার করতে হবে। সাধারণত, Guice এই স্কোপটি Servlet এর সাথে একত্রে ব্যবহৃত হয়।
Step 1: Guice এর জন্য RequestScope তৈরি করা
Guice-এ @RequestScope একটি কাস্টম স্কোপ তৈরি করতে সাহায্য করে। এটি নিশ্চিত করে যে একটি HTTP রিকোয়েস্টের মধ্যে একটি ক্লাসের কেবল একটি ইনস্ট্যান্স থাকবে।
import com.google.inject.AbstractModule;
import com.google.inject.Scopes;
import com.google.inject.servlet.ServletModule;
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(MyService.class).in(RequestScoped.class); // RequestScope ইনজেকশন
}
}
এখানে, RequestScoped.class ব্যবহার করে আমরা MyService ক্লাসকে Request Scope-এ বাইন্ড করেছি। এর মানে হল যে এক HTTP রিকোয়েস্টের মধ্যে MyService-এর একটি ইনস্ট্যান্স থাকবে এবং সেটি নতুন রিকোয়েস্টে পুনরায় তৈরি হবে না।
Step 2: @RequestScope অ্যানোটেশন ব্যবহার করা
Guice 4.0 এর পর, আপনি @RequestScoped অ্যানোটেশন ব্যবহার করে কোন ক্লাসকে Request Scope এ নির্দেশ করতে পারেন।
import com.google.inject.ScopeAnnotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@ScopeAnnotation
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestScoped {
}
এখন, আপনি RequestScoped অ্যানোটেশনটি কোনো ক্লাসে ব্যবহার করতে পারবেন যাতে এটি একটি নির্দিষ্ট HTTP রিকোয়েস্টের জন্য ইনস্ট্যান্স তৈরি হয়।
Step 3: MyService ক্লাস তৈরি করা
@RequestScoped
public class MyService {
public void performAction() {
System.out.println("Request Scoped Service executed!");
}
}
এখানে, MyService ক্লাসটি RequestScoped অ্যানোটেশন দ্বারা মার্ক করা হয়েছে, যার মানে এক HTTP রিকোয়েস্টের মধ্যে এর একটাই ইনস্ট্যান্স থাকবে।
Step 4: Guice-এ Request Scope ব্যবহার
এখন, Guice.createInjector() ব্যবহার করে Guice Injector তৈরি করুন এবং MyService-এর ইনস্ট্যান্সটি HTTP রিকোয়েস্টের জন্য ইনজেক্ট করুন।
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.servlet.ServletModule;
public class MainApp {
private final MyService myService;
@Inject
public MainApp(MyService myService) {
this.myService = myService;
}
public void execute() {
myService.performAction();
}
public static void main(String[] args) {
Injector injector = Guice.createInjector(new ServletModule(), new MyModule());
// Here, we simulate a request-scoped service invocation
MainApp app = injector.getInstance(MainApp.class);
app.execute();
}
}
এখানে, MainApp ক্লাসে MyService ইনজেক্ট করা হচ্ছে। Guice.createInjector() এর মাধ্যমে Guice Injector তৈরি হচ্ছে এবং Guice নিশ্চিত করছে যে MyService এর একটিমাত্র ইনস্ট্যান্স HTTP রিকোয়েস্টের জন্য থাকবে।
2. Guice Servlet Integration
Guice-এর Servlet Module ব্যবহার করে, আপনি HTTP রিকোয়েস্টের জন্য Request Scope কনফিগার করতে পারেন।
Step 1: Guice Servlet Module অন্তর্ভুক্ত করা
Guice Servlet Module Guice-কে HTTP রিকোয়েস্ট সাইকেল বুঝতে সাহায্য করে এবং এতে @RequestScoped ইনস্ট্যান্স তৈরি হয়।
import com.google.inject.servlet.ServletModule;
public class WebModule extends ServletModule {
@Override
protected void configureServlets() {
bind(MyService.class).in(RequestScoped.class); // RequestScope in Servlet
}
}
এখানে, ServletModule ব্যবহার করে আমরা Guice Servlet কনফিগারেশন তৈরি করছি, যেখানে MyService কে Request Scope-এ বাইন্ড করা হয়েছে।
Step 2: Guice Filter ব্যবহার করে Request Scope
Guice-এ RequestScope ব্যবস্থাপনা করতে, Guice ফিল্টার ব্যবহার করতে হয়, যা HTTP রিকোয়েস্টের সময় স্কোপ সৃষ্টি করে।
import com.google.inject.Injector;
import com.google.inject.servlet.GuiceFilter;
public class MyGuiceFilter extends GuiceFilter {
private final Injector injector;
public MyGuiceFilter(Injector injector) {
this.injector = injector;
}
@Override
protected Injector getInjector() {
return injector;
}
}
এখানে, GuiceFilter ব্যবহার করে Guice নিশ্চিত করে যে রিকোয়েস্টের জন্য সঠিক স্কোপ পরিচালিত হচ্ছে।
3. Request Scope ব্যবহার করার উপকারিতা
- Request-ভিত্তিক ইনস্ট্যান্স: যেকোনো HTTP রিকোয়েস্টের জন্য নির্দিষ্ট ইনস্ট্যান্স তৈরি হওয়া, যা পুনঃব্যবহারযোগ্য কিন্তু এক রিকোয়েস্টের মধ্যে নতুন ইনস্ট্যান্স তৈরি হয়।
- Web Applications: Web অ্যাপ্লিকেশনগুলোতে Request Scope সাধারণত ব্যবহার হয় যাতে প্রতিটি HTTP রিকোয়েস্টের জন্য পৃথক অবজেক্ট থাকে।
- Stateful Services: কিছু সার্ভিসে যেখানে স্টেটful ডেটা রাখা প্রয়োজন, Request Scope তার জন্য আদর্শ। এতে, রিকোয়েস্টের মধ্যে স্টেট রাখা হয় এবং অন্য রিকোয়েস্টে তার কোন প্রভাব পড়ে না।
Guice-এ Request Scope ব্যবস্থাপনা HTTP রিকোয়েস্ট সাইকেল ভিত্তিক স্কোপ নিশ্চিত করে এবং নিশ্চিত করে যে আপনার প্রয়োজনীয় ক্লাসের ইনস্ট্যান্স এক HTTP রিকোয়েস্টের মধ্যে একটাই থাকবে। এটি সাধারণত Servlets বা Web Applications-এ ব্যবহৃত হয়, যেখানে HTTP রিকোয়েস্টের জন্য বিশেষ ইনস্ট্যান্স প্রয়োজন হয়। Guice দিয়ে এটি করতে @RequestScope অ্যানোটেশন এবং Guice Servlet Module ব্যবহার করা হয়, যা সহজে স্কেলেবল এবং কার্যকরী ডিজাইন প্রদান করে।
Read more