@Pointcut annotation ব্যবহার করে Pointcut তৈরি করা

Pointcut এবং Join Point - স্প্রিং এওপি (Spring AOP) - Java Technologies

398

Spring AOP (Aspect-Oriented Programming) এর একটি শক্তিশালী বৈশিষ্ট্য হল PointcutPointcut হলো একটি এক্সপ্রেশন যা একটি নির্দিষ্ট মেথড বা মেথডের গ্রুপ চিহ্নিত করে যেখানে Advice (অথবা কোন কোড ব্লক) কার্যকরী হবে। Spring AOP তে @Pointcut অ্যানোটেশন ব্যবহার করে আপনি একটি পয়েন্টকাট তৈরি করতে পারেন এবং পরে সেই পয়েন্টকাটকে বিভিন্ন অ্যাডভাইজরে রেফারেন্স করতে পারেন।

১. Pointcut কী?

Pointcut হলো সেই জায়গা যেখানে আপনার অ্যাডভাইজ (Advice) কার্যকরী হবে। এটি মেথড সিগনেচার বা মেথডের উপরের JoinPoint নির্ধারণ করে। একটি Pointcut বিভিন্ন ধরণের JoinPoint তে কাজ করতে পারে যেমন:

  • একটি নির্দিষ্ট মেথডের আগে বা পরে কাজ করা।
  • মেথডে এক্সেপশন ঘটলে কাজ করা।
  • নির্দিষ্ট প্যাকেজ বা ক্লাসের মধ্যে সমস্ত মেথডে কাজ করা।

২. @Pointcut অ্যানোটেশন ব্যবহার করা

Spring AOP তে @Pointcut অ্যানোটেশন ব্যবহার করে আপনি একটি পয়েন্টকাট ডিফাইন করতে পারেন। একবার পয়েন্টকাট তৈরি হলে, এটি অন্য অ্যাডভাইজগুলিতে ব্যবহৃত হতে পারে।

উদাহরণ: @Pointcut ব্যবহার করে Pointcut তৈরি করা

ধরা যাক, আমাদের একটি LoggingAspect আছে যেখানে আমরা নির্দিষ্ট প্যাকেজের মেথডের আগে এবং পরে লগিং করতে চাই। আমরা @Pointcut অ্যানোটেশন ব্যবহার করে এই পয়েন্টকাট ডিফাইন করব।

@Aspect
@Component
public class LoggingAspect {

    // Pointcut definition: logs all methods in com.example.service package
    @Pointcut("execution(* com.example.service.*.*(..))")
    public void serviceMethods() {
        // Pointcut method doesn't need implementation
    }

    // Applying the pointcut to the before advice
    @Before("serviceMethods()")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("Logging before method execution: " + joinPoint.getSignature());
    }

    // Applying the pointcut to the after advice
    @After("serviceMethods()")
    public void logAfter(JoinPoint joinPoint) {
        System.out.println("Logging after method execution: " + joinPoint.getSignature());
    }

    // Applying the pointcut to the after returning advice
    @AfterReturning(pointcut = "serviceMethods()", returning = "result")
    public void logAfterReturning(JoinPoint joinPoint, Object result) {
        System.out.println("Method executed: " + joinPoint.getSignature() + " with result: " + result);
    }

    // Applying the pointcut to the after throwing advice
    @AfterThrowing(pointcut = "serviceMethods()", throwing = "exception")
    public void logAfterThrowing(JoinPoint joinPoint, Exception exception) {
        System.out.println("Method executed: " + joinPoint.getSignature() + " threw exception: " + exception);
    }
}

ব্যাখ্যা:

  • @Pointcut("execution( com.example.service..*(..))")**: এই পয়েন্টকাট এক্সপ্রেশনটি com.example.service প্যাকেজের সকল মেথডের জন্য কাজ করবে। execution(* com.example.service.*.*(..)) এর মাধ্যমে সমস্ত মেথডের উপর পয়েন্টকাটটি প্রযোজ্য হবে, যেখানে * নির্দেশ করে যে এটি যে কোনো রিটার্ন টাইপ এবং মেথড নামের জন্য কাজ করবে, এবং (..) নির্দেশ করে যে এটি যে কোনো প্যারামিটার গ্রহণ করবে।
  • @Before("serviceMethods()"): এটি serviceMethods পয়েন্টকাটের জন্য একটি before অ্যাডভাইজার তৈরি করে, যা মেথড কলের আগে কাজ করবে।
  • @After("serviceMethods()"): এটি serviceMethods পয়েন্টকাটের জন্য একটি after অ্যাডভাইজার তৈরি করে, যা মেথড কলের পরে কাজ করবে।
  • @AfterReturning: মেথড সফলভাবে রান করার পর serviceMethods পয়েন্টকাটে কার্যকরী হবে, এবং মেথডের রিটার্ন ভ্যালু লজ করতে সক্ষম হবে।
  • @AfterThrowing: যদি কোনো মেথডের execution এ exception ঘটে, তাহলে এই অ্যাডভাইজারটি কল হবে এবং exception লগ করবে।

৩. @Pointcut এর অন্যান্য ব্যবহার

Spring AOP তে @Pointcut আরও কিছু সাধারণ এক্সপ্রেশন সাপোর্ট করে যা বিভিন্ন ধরনের মেথড সিগনেচার বা মেথডের কল প্যাটার্নে কাজ করতে পারে। কিছু উদাহরণ:

১. Specific Method Execution

@Pointcut("execution(* com.example.service.UserService.getUserById(..))")
public void specificMethodExecution() {}

এটি শুধুমাত্র getUserById মেথডের জন্য কাজ করবে।

২. Methods with Specific Return Type

@Pointcut("execution(public String com.example.service.UserService.*(..))")
public void methodsWithStringReturnType() {}

এটি সেই সমস্ত মেথডের জন্য কাজ করবে যেগুলির রিটার্ন টাইপ String

৩. Methods in Specific Classes

@Pointcut("execution(* com.example.service.*Service.*(..))")
public void methodsInServiceClasses() {}

এটি সকল *Service ক্লাসের মেথডে কাজ করবে।

৪. Methods with Specific Arguments

@Pointcut("execution(* com.example.service.*.*(String))")
public void methodsWithStringArgument() {}

এটি সেই সমস্ত মেথডের জন্য কাজ করবে যেগুলির একমাত্র আর্গুমেন্ট String টাইপ হবে।


সারাংশ

Spring AOP তে @Pointcut অ্যানোটেশন ব্যবহার করে আপনি যে সমস্ত মেথডের উপরে অ্যাডভাইজ (advice) প্রয়োগ করতে চান, সেগুলোর পয়েন্টকাট (JoinPoints) ডিফাইন করতে পারেন। Pointcut একটি এক্সপ্রেশন যা মেথডের নির্বাচন করে এবং তার উপর অ্যাডভাইজ কার্যকরী করে। @Pointcut অ্যানোটেশন এবং execution এক্সপ্রেশন এর মাধ্যমে আমরা নির্দিষ্ট মেথড বা ক্লাসের মেথডের উপরে লগিং, সিকিউরিটি বা অন্যান্য ক্রস-কাটিং কনসার্ন যেমন ট্রানজেকশন ম্যানেজমেন্ট প্রয়োগ করতে পারি। Spring AOP তে @Pointcut ব্যবহার করে আপনি আরও সহজে কোডের পুনঃব্যবহারযোগ্য অংশ আলাদা করে বাস্তবায়ন করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...