স্প্রিং AOP (Aspect-Oriented Programming) একটি শক্তিশালী কনসেপ্ট যা ক্রস-কাটিং কনসার্ন যেমন লগিং, সিকিউরিটি, ট্রানজেকশন ম্যানেজমেন্ট ইত্যাদি মূল বিজনেস লজিক থেকে আলাদা করে প্রোগ্রামে যুক্ত করতে সাহায্য করে। AOP-তে @AfterReturning এবং @AfterThrowing অ্যানোটেশনগুলি অত্যন্ত গুরুত্বপূর্ণ। এগুলি ব্যবহৃত হয় মেথডের রিটার্ন ভ্যালু এবং এক্সেপশন হ্যান্ডলিং সম্পর্কিত কার্যকলাপ পরিচালনা করতে।
এই টিউটোরিয়ালে আমরা @AfterReturning এবং @AfterThrowing এর ব্যবহার এবং কিভাবে এগুলি বিভিন্ন পরিস্থিতিতে কার্যকর হয়, তা বিস্তারিতভাবে আলোচনা করব।
১. @AfterReturning Annotation
@AfterReturning অ্যানোটেশনটি একটি After Returning Advice তৈরি করে, যা একটি মেথড সফলভাবে রান হওয়ার পর কার্যকর হয়। এটি সাধারণত মেথডের রিটার্ন ভ্যালু (return value) প্রসেস বা লগিং করতে ব্যবহৃত হয়।
প্রধান বৈশিষ্ট্য:
@AfterReturningব্যবহার করে আপনি মেথডের সফল রিটার্ন ভ্যালুকে গ্রহণ করতে পারেন এবং তার উপর কোনো কাজ করতে পারেন।- এটি শুধুমাত্র তখন কার্যকর হয় যখন মেথড কোনো এক্সেপশন ছুড়ে না দিয়ে সঠিকভাবে শেষ হয়।
উদাহরণ: @AfterReturning এর ব্যবহার
ধরা যাক, আমাদের একটি সার্ভিস ক্লাস রয়েছে যেখানে একজন ইউজারের তথ্য রিটার্ন করা হয়, এবং আমরা সেই রিটার্ন ভ্যালুকে লগ করতে চাই।
@Aspect
@Component
public class LoggingAspect {
// @AfterReturning: Successful method execution
@AfterReturning(value = "execution(* com.example.service.UserService.getUserById(..))", returning = "result")
public void logAfterReturning(JoinPoint joinPoint, Object result) {
System.out.println("Method " + joinPoint.getSignature().getName() + " returned with value: " + result);
}
}
এখানে, @AfterReturning অ্যানোটেশনটি com.example.service.UserService.getUserById(..) পয়েন্টকাটে প্রয়োগ করা হয়েছে। এর মাধ্যমে, যখন getUserById() মেথড সফলভাবে কোনো ইউজার রিটার্ন করবে, তখন আমরা সেই ইউজারের তথ্য লগ করব।
Parameters:
value: এটি Pointcut expression যা নির্ধারণ করে কোন মেথডে অ্যাডভাইসটি কার্যকর হবে।returning: এটি সেই প্যারামিটার যা মেথডের রিটার্ন ভ্যালুকে ক্যাপচার করে এবংlogAfterReturningমেথডে পাঠানো হয়।
২. @AfterThrowing Annotation
@AfterThrowing অ্যানোটেশনটি একটি After Throwing Advice তৈরি করে, যা একটি মেথডে কোনো এক্সেপশন ঘটলে কার্যকর হয়। এই অ্যাডভাইসটি বিশেষত এক্সেপশন হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়, যেমন লগিং, ট্রানজেকশন রোলব্যাক বা কোনো নির্দিষ্ট অ্যাকশন নেওয়া।
প্রধান বৈশিষ্ট্য:
@AfterThrowingশুধুমাত্র তখন কার্যকর হয় যখন মেথডে কোনো এক্সেপশন ঘটে।- এটি এক্সেপশনের তথ্য সংগ্রহ করতে সাহায্য করে, যা লগ বা অন্যান্য কার্যকলাপের জন্য ব্যবহার করা যেতে পারে।
উদাহরণ: @AfterThrowing এর ব্যবহার
ধরা যাক, আমাদের একটি সার্ভিস ক্লাস রয়েছে, যেখানে একটি মেথড একটি এক্সেপশন ছুড়ে দেয় যখন ইউজার পাওয়া না যায়, এবং আমরা সেই এক্সেপশন লগ করতে চাই।
@Aspect
@Component
public class LoggingAspect {
// @AfterThrowing: If the method throws an exception
@AfterThrowing(value = "execution(* com.example.service.UserService.getUserById(..))", throwing = "ex")
public void logAfterThrowing(JoinPoint joinPoint, Exception ex) {
System.out.println("Method " + joinPoint.getSignature().getName() + " threw exception: " + ex.getMessage());
}
}
এখানে, @AfterThrowing অ্যানোটেশনটি com.example.service.UserService.getUserById(..) পয়েন্টকাটে প্রয়োগ করা হয়েছে। যখন getUserById() মেথডে কোনো এক্সেপশন ঘটবে, তখন তা logAfterThrowing মেথডে পাঠানো হবে এবং এক্সেপশন লগ হবে।
Parameters:
value: এটি Pointcut expression যা নির্ধারণ করে কোন মেথডে অ্যাডভাইসটি কার্যকর হবে।throwing: এটি সেই প্যারামিটার যা এক্সেপশনটি ধারণ করে এবংlogAfterThrowingমেথডে পাঠানো হয়।
@AfterReturning এবং @AfterThrowing এর পার্থক্য
| Feature | @AfterReturning | @AfterThrowing |
|---|---|---|
| Trigger Point | মেথড সফলভাবে রান হওয়ার পর (return value) | মেথডে এক্সেপশন ঘটলে (exception thrown) |
| Execution Condition | শুধুমাত্র যখন মেথড কোনো এক্সেপশন ছুড়ে না দিয়ে সফলভাবে রান হয় | শুধুমাত্র যখন মেথডে কোনো এক্সেপশন ঘটে |
| Use Case | রিটার্ন ভ্যালু লগ বা প্রক্রিয়া করা | এক্সেপশন হ্যান্ডলিং (লগিং বা রোলব্যাক) |
| Parameters | returning প্যারামিটার রিটার্ন ভ্যালু ধারণ করে | throwing প্যারামিটার এক্সেপশন ধারণ করে |
সারাংশ
স্প্রিং AOP-তে @AfterReturning এবং @AfterThrowing অ্যানোটেশন দুটি অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। @AfterReturning ব্যবহৃত হয় সফল মেথড এক্সিকিউশনের পর রিটার্ন ভ্যালু প্রসেস করার জন্য, এবং @AfterThrowing ব্যবহৃত হয় যখন মেথডে কোনো এক্সেপশন ঘটে, তখন সেই এক্সেপশন হ্যান্ডলিং বা লগিং করার জন্য।
এগুলি স্প্রিং AOP-তে ক্রস-কাটিং কনসার্ন (যেমন লগিং, এক্সেপশন হ্যান্ডলিং) আলাদাভাবে হ্যান্ডল করার মাধ্যমে প্রোগ্রামের কোডকে পরিষ্কার, মডুলার এবং রক্ষণাবেক্ষণযোগ্য করে তোলে।
Read more