Guice Aspect-Oriented Programming (AOP) এর জন্য পূর্ণাঙ্গ সাপোর্ট সরবরাহ না করলেও, এটি Method Interception প্রদান করে যা AOP এর মৌলিক ধারণা পূরণ করে। Method Interception এর মাধ্যমে আপনি একটি মেথডের কার্যক্রমকে কাস্টম লজিকের মাধ্যমে প্রি-প্রসেস বা পোস্ট-প্রসেস করতে পারেন, যেমন লগিং, পারফরমেন্স ট্র্যাকিং, নিরাপত্তা চেক, বা ডিপেনডেন্সি ম্যানেজমেন্ট।
Guice-এর Interceptor এর সাহায্যে আমরা কাস্টম লজিক একটি মেথডে প্রবাহিত করতে পারি। এখানে Guice AOP এবং Method Interception এর ব্যবহার সংক্রান্ত একটি বিস্তারিত উদাহরণ দেওয়া হল।
1. Guice Interceptor এবং Method Interception
Guice-এ Interceptor ব্যবহার করার জন্য আপনাকে প্রথমে একটি Annotation এবং একটি Interceptor Class তৈরি করতে হবে। এরপর এই ইন্টারসেপ্টরকে Guice মডিউলে Bind করতে হবে।
Step 1: Create an Annotation for Interception
প্রথমে একটি কাস্টম অ্যানোটেশন তৈরি করা হবে, যা Guice-এ method interception নির্দিষ্ট করতে ব্যবহৃত হবে।
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
// Custom Annotation
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}
Step 2: Create the Interceptor
এখন আমরা একটি Interceptor তৈরি করব যা ঐ অ্যানোটেশন ব্যবহার করে মেথডের কার্যক্রমকে পর্যবেক্ষণ করবে। Guice-এ MethodInterceptor ইন্টারফেসের মাধ্যমে এই কাজটি করা সম্ভব।
import com.google.inject.Inject;
import com.google.inject.Interceptor;
import com.google.inject.matcher.Matchers;
import java.lang.reflect.Method;
public class LoggingInterceptor implements Interceptor {
@Override
public Object invoke(com.google.inject.MethodInvocation invocation) throws Throwable {
// Log before method execution
System.out.println("Method " + invocation.getMethod().getName() + " is starting...");
// Proceed with the method execution
Object result = invocation.proceed();
// Log after method execution
System.out.println("Method " + invocation.getMethod().getName() + " finished.");
return result;
}
}
Step 3: Bind Interceptor in Guice Module
এখন Guice মডিউল তৈরি করে ইন্টারসেপ্টরটি যোগ করা হবে। আপনি bindInterceptor মেথডের মাধ্যমে Guice-এ Interceptor সেট আপ করতে পারেন।
import com.google.inject.AbstractModule;
import com.google.inject.matcher.Matchers;
public class AppModule extends AbstractModule {
@Override
protected void configure() {
// Bind method interception for methods annotated with @LogExecutionTime
bindInterceptor(Matchers.annotatedWith(LogExecutionTime.class),
Matchers.any(),
new LoggingInterceptor());
}
}
Step 4: Apply the Annotation on Methods
এখন, আপনি যেকোনো মেথডে @LogExecutionTime অ্যানোটেশন ব্যবহার করতে পারেন, এবং Guice এই মেথডগুলো ইন্টারসেপ্ট করবে।
public class MyService {
@LogExecutionTime
public void process() {
System.out.println("Processing...");
}
}
Step 5: Create Guice Injector and Test the Interception
এখন আমরা Guice Injector ব্যবহার করে MyService ক্লাসটি ইনজেক্ট করব এবং মেথড কলের সময় ইন্টারসেপশন প্রক্রিয়া পরীক্ষা করব।
import com.google.inject.Guice;
import com.google.inject.Injector;
public class Main {
public static void main(String[] args) {
// Create Guice Injector with AppModule configuration
Injector injector = Guice.createInjector(new AppModule());
// Get the instance of MyService with Interceptor applied
MyService myService = injector.getInstance(MyService.class);
// Call the process method which is intercepted
myService.process(); // Output: Logs before and after method execution
}
}
Output:
Method process is starting...
Processing...
Method process finished.
2. AOP (Aspect-Oriented Programming) in Guice
Guice নিজে AOP-এর সম্পূর্ণ সমাধান সরবরাহ না করলেও, Method Interception এর মাধ্যমে AOP কৌশল ব্যবহারের জন্য এটি যথেষ্ট কার্যকর। Guice এ Aspect-Oriented Programming মূলত বিভিন্ন concerns (যেমন logging, transactions, error handling) আলাদা করে মেথডে ইন্টারসেপশন ব্যবহার করে আলাদা করা হয়।
- Before Advice: মেথডটি চালানোর আগে কিছু কাজ করা।
- After Advice: মেথডটি শেষ হওয়ার পরে কিছু কাজ করা।
- Around Advice: মেথডটি চালানোর আগে এবং পরে কাজ করা।
Guice-এর মাধ্যমে আমরা এই Advice-গুলো প্রয়োগ করতে পারি, যেটি একইরকম কাজ AOP কনসেপ্টের মতো করে।
3. Guice Method Interception এর উপকারিতা
- Separation of Concerns: Method Interception এর মাধ্যমে কোডের বিভিন্ন দিককে আলাদা করে রাখা সম্ভব, যেমন লগিং, পারফরমেন্স মনিটরিং, বা ট্রানজেকশন ম্যানেজমেন্ট।
- Reusability: ইন্টারসেপ্টরটি একবার লিখে আপনার প্রোজেক্টের মধ্যে পুনঃব্যবহার করা সম্ভব।
- Cleaner Code: মেথডের মধ্যে সরাসরি লজিক লেখা না হয়ে ইন্টারসেপ্টরের মাধ্যমে আলাদা করা যায়, যার ফলে কোডের রিডেবিলিটি বৃদ্ধি পায়।
- Performance Monitoring: Guice-এ Method Interception ব্যবহার করে আপনি সহজেই একটি মেথডের এক্সিকিউশন টাইম ট্র্যাক করতে পারেন।
Guice-এ Method Interception এবং AOP ব্যবহারের মাধ্যমে আপনি মেথডের কার্যক্রমে কাস্টম লজিক প্রয়োগ করতে পারেন। Guice এর Interceptor এবং অ্যানোটেশন ভিত্তিক পদ্ধতি আপনাকে AOP কৌশল প্রয়োগ করার জন্য একটি সহজ এবং মডুলার পদ্ধতি সরবরাহ করে। এটি কোডের রিডেবিলিটি, পুনঃব্যবহারযোগ্যতা এবং সিস্টেমের লজিক আলাদা করার জন্য কার্যকরী।
Read more