স্প্রিং এওপিতে Advice এর মাধ্যমে টার্গেট মেথডের আর্গুমেন্ট (Arguments) ক্যাপচার করা এবং ব্যবহার করা সম্ভব। এটি এমন ক্ষেত্রে উপকারী, যখন নির্দিষ্ট ইনপুট অনুযায়ী বিভিন্ন কাজ সম্পাদন করতে হয়, যেমন লগিং বা ইনপুট ডেটা যাচাই।
কীভাবে Advice-এ Arguments পাস করা যায়?
@Before, @After, এবং @Around সহ অন্যান্য Advice-এ মেথড সিগনেচারের মাধ্যমে আর্গুমেন্ট পাস করা যায়।
উদাহরণ: Advice-এ Arguments ব্যবহার
Step 1: Maven ডিপেনডেন্সি
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
Step 2: টার্গেট ক্লাস তৈরি
public class EmployeeService {
public void addEmployee(String name, String department) {
System.out.println("Adding employee: " + name + " to department: " + department);
}
public void removeEmployee(String name) {
System.out.println("Removing employee: " + name);
}
}
Step 3: Aspect তৈরি
Advice-এ Arguments পাস করার জন্য:
@Aspect
@Component
public class LoggingAspect {
// Before Advice with arguments
@Before("execution(* EmployeeService.addEmployee(..)) && args(name, department)")
public void logBeforeAddEmployee(String name, String department) {
System.out.println("Before adding employee: " + name + ", Department: " + department);
}
// After Advice with arguments
@After("execution(* EmployeeService.removeEmployee(..)) && args(name)")
public void logAfterRemoveEmployee(String name) {
System.out.println("After removing employee: " + name);
}
// Around Advice capturing arguments
@Around("execution(* EmployeeService.*(..))")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
Object[] args = joinPoint.getArgs(); // Arguments ক্যাপচার
System.out.println("Method: " + joinPoint.getSignature().getName() + ", Arguments: " + Arrays.toString(args));
Object result = joinPoint.proceed(); // মেথড এক্সিকিউট করে
System.out.println("Method executed: " + joinPoint.getSignature().getName());
return result;
}
}
Step 4: কনফিগারেশন
@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}
Step 5: মেইন ক্লাস
public class AopDemoApplication {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
EmployeeService employeeService = context.getBean(EmployeeService.class);
employeeService.addEmployee("John Doe", "IT");
employeeService.removeEmployee("Jane Doe");
context.close();
}
}
আউটপুট
Before adding employee: John Doe, Department: IT
Adding employee: John Doe to department: IT
Method: addEmployee, Arguments: [John Doe, IT]
Method executed: addEmployee
Removing employee: Jane Doe
After removing employee: Jane Doe
Method: removeEmployee, Arguments: [Jane Doe]
Method executed: removeEmployee
ব্যাখ্যা
- Arguments ক্যাপচার:
- @Before এবং @After Advice-এর মাধ্যমে নির্দিষ্ট আর্গুমেন্ট পাস করা হয়েছে।
- @Around Advice ব্যবহার করে সমস্ত আর্গুমেন্ট একসাথে ক্যাপচার করা হয়েছে।
args()কনস্ট্রাক্ট:- এটি নির্দিষ্ট মেথডের আর্গুমেন্ট ক্যাপচার করতে ব্যবহৃত হয়।
- ProceedingJoinPoint:
- @Around Advice-এ মেথডের আর্গুমেন্ট এবং এক্সিকিউশন নিয়ন্ত্রণ করতে ব্যবহৃত হয়।
উপসংহার
Advice-এ Arguments পাস করার মাধ্যমে স্প্রিং এওপিতে ডায়নামিক লগিং, ডেটা যাচাই এবং আরও অনেক কাস্টম প্রসেস সহজেই সম্পন্ন করা যায়। এটি অ্যাপ্লিকেশন মেইনটেনেন্স এবং ডিবাগিংকে আরও কার্যকর করে তোলে।
Content added By