Parameterized Advice হল AOP-এ এমন একটি কনসেপ্ট যেখানে Advice এর মাধ্যমে প্যারামিটারস (অথবা আর্গুমেন্টস) পাস করা হয়। Spring AOP এ আপনি JoinPoint এবং MethodSignature ব্যবহার করে মেথডের প্যারামিটার বা আর্গুমেন্টস অ্যাক্সেস করতে পারেন এবং সেই অনুযায়ী লজিক প্রয়োগ করতে পারেন।
Parameterized Advice এর মাধ্যমে আপনি কোনো মেথডের আর্গুমেন্টকে ট্র্যাক করতে পারেন এবং সেই আর্গুমেন্টের ভিত্তিতে কিছু কার্যকরী করতে পারেন (যেমন, লগিং, ভ্যালিডেশন বা সিকিউরিটি চেক)।
Parameterized Advice এর উদাহরণ
ধরা যাক, আমরা একটি UserService ক্লাসে একটি মেথড তৈরি করব এবং Spring AOP ব্যবহার করে সেই মেথডের আর্গুমেন্ট লোগ করব। এই উদাহরণে, আমরা দেখাবো কিভাবে Parameterized Advice ব্যবহার করা যায়।
১. Service ক্লাস তৈরি করা
এখানে একটি UserService ক্লাস আছে যেখানে একটি addUser মেথড রয়েছে, যা একটি User অবজেক্ট গ্রহণ করে।
package com.example.service;
import org.springframework.stereotype.Service;
@Service
public class UserService {
public void addUser(String name, int age) {
System.out.println("Adding user: " + name + " with age: " + age);
}
}
২. Aspect ক্লাস তৈরি করা (Parameterized Advice)
এখন আমরা Aspect ক্লাস তৈরি করব যা addUser মেথডের প্যারামিটার (name এবং age) ট্র্যাক করবে এবং সেগুলো লগ করবে।
package com.example.aspect;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LoggingAspect {
// Pointcut Expression: "execution" expression দিয়ে মেথডের সিগনেচার নির্দিষ্ট করা
@Pointcut("execution(* com.example.service.UserService.addUser(..))")
public void userServiceMethod() {}
// Before Advice: মেথড কল হওয়ার আগে আর্গুমেন্ট প্রিন্ট করা
@Before("userServiceMethod() && args(name, age)") // "args" দিয়ে প্যারামিটারস গ্র্যাব করা
public void logMethodArguments(String name, int age) {
System.out.println("Before method execution: Name = " + name + ", Age = " + age);
}
}
ব্যাখ্যা:
@Before: এটি একটি Before Advice, যা মেথড কল হওয়ার আগে কার্যকরী হয়।args(name, age): এই অংশটি মেথডের আর্গুমেন্টগুলোকে ক্যapture করে, এবংnameএবংageপ্যারামিটারসকে Spring AOP দ্বারা আর্গুমেন্ট হিসেবে পাস করা হয়।execution(* com.example.service.UserService.addUser(..)): এই Pointcut এক্সপ্রেশনটি নির্দিষ্ট করে যেUserServiceক্লাসেরaddUserমেথডটি লক্ষ্য করা হবে এবং তার আর্গুমেন্টস ট্র্যাক করা হবে।
৩. Spring Configuration Class
package com.example.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration
@ComponentScan(basePackages = "com.example")
@EnableAspectJAutoProxy // Enable AspectJ auto proxying for AOP
public class AppConfig {
}
৪. Main ক্লাস (Application Runner)
package com.example;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.example.service.UserService;
public class Main {
public static void main(String[] args) {
// Spring context লোড করা
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(AppConfig.class);
// UserService Bean রিট্রিভ করা
UserService userService = context.getBean(UserService.class);
// addUser মেথড কল করা
userService.addUser("John Doe", 30);
context.close();
}
}
৫. আউটপুট:
Before method execution: Name = John Doe, Age = 30
Adding user: John Doe with age: 30
এখানে:
- Before Advice লগ করেছে যে
addUserমেথডটি কল হওয়ার আগে প্যারামিটারস (nameএবংage) কী ছিল। - তারপর,
UserServiceক্লাসের মূল কার্যকলাপ (মেথড কল) বাস্তবায়িত হয়েছে।
Spring AOP তে Parameterized Advice এর উপকারিতা
- ডিবাগিং এবং লগিং:
- আপনি মেথডের আর্গুমেন্ট ট্র্যাক করতে পারেন এবং সেগুলোর মাধ্যমে লগ তৈরি করতে পারেন, যা ডিবাগিংকে সহজ করে তোলে।
- অথেনটিকেশন এবং অথোরাইজেশন:
- মেথডে পাস করা আর্গুমেন্টের ভিত্তিতে সিকিউরিটি চেক বা অথেনটিকেশন করতে পারেন। উদাহরণস্বরূপ, আপনি ব্যবহারকারীর নাম বা বয়স যাচাই করতে পারেন।
- ভ্যালিডেশন:
- মেথডের আর্গুমেন্টের মান যাচাই করা এবং সেগুলোর উপর ভিত্তি করে ভ্যালিডেশন বা ট্রান্সফরমেশন প্রয়োগ করা।
- পারফরম্যান্স ট্র্যাকিং:
- মেথডের প্যারামিটার অ্যাক্সেস করে আপনি কীভাবে আর্গুমেন্ট ব্যবহার করা হচ্ছে তা পর্যবেক্ষণ করতে পারেন, বিশেষত যখন আপনি আর্গুমেন্টের উপর ভিত্তি করে পারফরম্যান্স মেট্রিক ট্র্যাক করেন।
সারাংশ
Parameterized Advice হল AOP-এর একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে মেথডের আর্গুমেন্ট ট্র্যাক করতে এবং সেগুলির ভিত্তিতে নির্দিষ্ট কাজ (লগিং, ভ্যালিডেশন, সিকিউরিটি চেক, ইত্যাদি) করতে সহায়তা করে। Spring AOP-তে args প্যারামিটারটি ব্যবহার করে আপনি সহজেই মেথডের ইনপুট প্যারামিটার অ্যাক্সেস করতে পারেন এবং সেগুলোর ভিত্তিতে সঠিক লজিক প্রয়োগ করতে পারেন। AOP-তে Parameterized Advice ব্যবহার করে কোড আরও পরিষ্কার, মডুলার এবং রক্ষণাবেক্ষণযোগ্য হয়ে ওঠে।