Spring AOP (Aspect-Oriented Programming) হল একটি শক্তিশালী কৌশল যা ক্রস-কাটিং কনসার্ন (যেমন লগিং, সিকিউরিটি, ট্রানজেকশন ম্যানেজমেন্ট ইত্যাদি) গুলি মূল লজিকের বাইরে রেখে পরিচালনা করতে সাহায্য করে। এতে, আপনি যেকোনো ফাংশন বা মেথডের আগে বা পরে অতিরিক্ত কার্যক্রম (advice) যুক্ত করতে পারেন। এর মধ্যে দুটি প্রধান Advice হল Before Advice এবং After Advice।
- Before Advice: এটি টার্গেট মেথড কল হওয়ার আগে কার্যকর হয়।
- After Advice: এটি টার্গেট মেথড কল হওয়ার পরে কার্যকর হয়।
এখানে, আমরা Before Advice এবং After Advice এর ব্যবহার দেখব।
Before Advice
Before Advice হল এমন একটি অ্যাডভাইস যা টার্গেট মেথডের কল হওয়ার আগে কার্যকর হয়। এটি সাধারণত লগিং, সিকিউরিটি চেকিং, অথবা অন্যান্য প্রক্রিয়া সম্পাদন করার জন্য ব্যবহৃত হয়, যা মেথড কল হওয়ার আগেই সম্পন্ন হতে হবে।
উদাহরণ: Before Advice ব্যবহার
ধরা যাক, আমাদের একটি সিম্পল সেবা (service) ক্লাস আছে, যেখানে একটি মেথড রয়েছে যেটি কিছু কার্যকলাপ (action) সম্পাদন করে। আমরা চাই, যখন এই মেথড কল হবে, তখন তার আগে কিছু লগিং করা হোক।
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.service.MyService.performAction(..))")
public void logBefore(JoinPoint joinPoint) {
// মেথড কল হওয়ার আগে লগিং
System.out.println("Executing method: " + joinPoint.getSignature().getName());
}
}
এখানে:
- @Before অ্যানোটেশনটি ব্যবহার করা হয়েছে যা
execution(* com.example.service.MyService.performAction(..))পয়েন্টকাট এক্সপ্রেশনটি সিলেক্ট করে, যার মানে হল,MyServiceক্লাসেরperformActionমেথড কল হওয়ার আগে logBefore মেথডটি কার্যকর হবে। joinPoint.getSignature().getName()মেথডের নামটি বের করতে ব্যবহৃত হচ্ছে।
Service Class
@Service
public class MyService {
public void performAction() {
System.out.println("Action performed!");
}
}
এখানে, performAction মেথড কল হওয়ার আগে logBefore অ্যাডভাইসটি কার্যকর হবে এবং কনসোলে মেথডের নাম প্রিন্ট করবে।
After Advice
After Advice হল এমন একটি অ্যাডভাইস যা টার্গেট মেথড কল হওয়ার পরে কার্যকর হয়। এটি সাধারণত মেথডটি সফলভাবে সম্পন্ন হওয়ার পর কিছু কাজ করতে ব্যবহৃত হয়, যেমন রিসোর্স ক্লোজ করা, লগিং বা ডেটা ফিল্টার করা।
উদাহরণ: After Advice ব্যবহার
ধরা যাক, আমরা একটি processData মেথড কল করার পর কিছু ফিনালাইজেশন বা লগিং করতে চাই। আমরা After Advice ব্যবহার করব যেটি মেথডের পরে কার্যকর হবে।
@Aspect
@Component
public class LoggingAspect {
@After("execution(* com.example.service.MyService.processData(..))")
public void logAfter(JoinPoint joinPoint) {
// মেথড কল হওয়ার পরে লগিং
System.out.println("Method executed: " + joinPoint.getSignature().getName());
}
}
এখানে:
- @After অ্যানোটেশনটি ব্যবহার করা হয়েছে, যা
execution(* com.example.service.MyService.processData(..))পয়েন্টকাট এক্সপ্রেশনটি সিলেক্ট করে, যার মানে হল,processDataমেথড কল হওয়ার পরে logAfter মেথডটি কার্যকর হবে। joinPoint.getSignature().getName()মেথডের নামটি বের করার জন্য ব্যবহৃত হচ্ছে।
Service Class
@Service
public class MyService {
public void processData() {
System.out.println("Data processed!");
}
}
এখানে, processData মেথড কল হওয়ার পর logAfter অ্যাডভাইসটি কার্যকর হবে এবং কনসোলে মেথডের নাম প্রিন্ট করবে।
Before এবং After Advice একত্রে ব্যবহার করা
Spring AOP এ, আপনি Before Advice এবং After Advice একত্রে ব্যবহার করতে পারেন যাতে একটি মেথডের আগে এবং পরে আলাদা আলাদা কার্যকলাপ সম্পাদন করা যায়।
@Aspect
@Component
public class LoggingAspect {
@Before("execution(* com.example.service.MyService.performAction(..))")
public void logBefore(JoinPoint joinPoint) {
System.out.println("Before method execution: " + joinPoint.getSignature().getName());
}
@After("execution(* com.example.service.MyService.performAction(..))")
public void logAfter(JoinPoint joinPoint) {
System.out.println("After method execution: " + joinPoint.getSignature().getName());
}
}
এখানে, performAction মেথডের আগে এবং পরে আলাদা আলাদা লগিং করা হয়েছে। logBefore মেথড মেথড কল হওয়ার আগে এবং logAfter মেথড মেথড কল হওয়ার পরে কার্যকর হবে।
সারাংশ
- Before Advice: এটি টার্গেট মেথড কল হওয়ার আগে কার্যকর হয় এবং এটি সাধারণত লগিং, সিকিউরিটি চেক, বা প্রি-প্রসেসিং কাজের জন্য ব্যবহৃত হয়।
- After Advice: এটি টার্গেট মেথড কল হওয়ার পরে কার্যকর হয় এবং এটি সাধারণত পোস্ট-প্রসেসিং, রিসোর্স ক্লোজিং বা লগিংয়ের জন্য ব্যবহৃত হয়।
Spring AOP আপনাকে এই ধরনের কার্যক্রম সহজে বাস্তবায়ন করতে সাহায্য করে, যা কোডকে পরিষ্কার এবং পুনঃব্যবহারযোগ্য রাখে। Before Advice এবং After Advice ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনে ক্রস-কাটিং কনসার্ন কার্যকরভাবে পরিচালনা করতে পারেন।
Read more