@Around অ্যানোটেশন স্প্রিং এওপিতে ব্যবহৃত একটি শক্তিশালী টুল যা টার্গেট মেথডের কার্য সম্পাদনের আগে ও পরে কার্যকর হয়। এটি মেথডের কার্যপ্রণালী নিয়ন্ত্রণ এবং পরিবর্তন করার ক্ষমতা প্রদান করে। সাধারণত, লগিং, এক্সিকিউশন টাইম পরিমাপ, সিকিউরিটি চেক ইত্যাদির জন্য ব্যবহৃত হয়।
@Around অ্যানোটেশন ব্যবহার করে Advice তৈরি করার ধাপ
Step 1: Maven ডিপেনডেন্সি
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
Step 2: টার্গেট ক্লাস তৈরি
public class EmployeeService {
public void addEmployee(String name) {
System.out.println("Adding employee: " + name);
}
public void removeEmployee(String name) {
System.out.println("Removing employee: " + name);
}
}
Step 3: Aspect তৈরি
@Around অ্যানোটেশন ব্যবহার করে লগিং Advice:
@Aspect
@Component
public class LoggingAspect {
@Around("execution(* EmployeeService.*(..))")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("Before method: " + joinPoint.getSignature().getName());
long startTime = System.currentTimeMillis();
Object result;
try {
result = joinPoint.proceed(); // মেথড এক্সিকিউট করে
} catch (Exception e) {
System.out.println("Exception in method: " + joinPoint.getSignature().getName());
throw e;
}
long endTime = System.currentTimeMillis();
System.out.println("After method: " + joinPoint.getSignature().getName());
System.out.println("Execution time: " + (endTime - startTime) + " ms");
return result;
}
}
Step 4: কনফিগারেশন
Annotation-Based Configuration
@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");
employeeService.removeEmployee("Jane Doe");
context.close();
}
}
আউটপুট
Before method: addEmployee
Adding employee: John Doe
After method: addEmployee
Execution time: 10 ms
Before method: removeEmployee
Removing employee: Jane Doe
After method: removeEmployee
Execution time: 5 ms
ব্যাখ্যা
- ProceedingJoinPoint: এটি @Around অ্যানোটেশনের জন্য ব্যবহার করা হয়, যা টার্গেট মেথডে প্রবেশ এবং প্রস্থান করার সুযোগ দেয়।
- joinPoint.proceed(): এটি টার্গেট মেথড এক্সিকিউট করে।
- Execution Time Calculation: মেথডের কার্য সম্পাদনের সময় মাপা যায়।
উপসংহার
@Around অ্যানোটেশন ব্যবহারের মাধ্যমে টার্গেট মেথডের কার্যপ্রণালী নিয়ন্ত্রণ এবং এক্সিকিউশন টাইম পরিমাপ করা যায়। এটি স্প্রিং এওপিতে ক্রস-কাটিং কনসার্ন মডুলারাইজ করার একটি চমৎকার উপায়।
Content added By