@Before annotation এর মাধ্যমে Before Advice কনফিগার করা

Before এবং After Advice - স্প্রিং এওপি (Spring AOP) - Java Technologies

287

Before Advice কি?

Before Advice হলো স্প্রিং AOP এর একটি ধরনের অ্যাডভাইস যা নির্দিষ্ট Join Point-এর আগে কার্যকরী হয়। Before Advice ব্যবহৃত হয় যখন আপনি কোনো মেথডের চালু হওয়ার আগে কিছু কার্যকলাপ করতে চান, যেমন লগিং, সিকিউরিটি চেকিং বা ট্রানজেকশন ম্যানেজমেন্ট। এটি একটি কার্যকরী উপায় যা আপনার কোডের মূল ব্যবসায়িক লজিকের আগে পূর্বশর্ত যাচাই বা অতিরিক্ত কার্যকলাপ করতে সাহায্য করে।

স্প্রিং AOP-তে @Before অ্যানোটেশন ব্যবহার করে Before Advice কনফিগার করা হয়, যা মেথড কল হওয়ার আগে নির্বাহিত হয়।


@Before Annotation এর মাধ্যমে Before Advice কনফিগার করা

স্প্রিং AOP-তে @Before অ্যানোটেশন ব্যবহার করে আপনি Before Advice কনফিগার করতে পারেন। @Before অ্যানোটেশনটি @Aspect ক্লাসে ব্যবহৃত হয় এবং এটি এক্সিকিউশনের আগে একটি নির্দিষ্ট ক্রস-কাটিং কনসার্ন (যেমন লগিং, নিরাপত্তা চেক, ইত্যাদি) পরিচালনা করার জন্য কাজ করে।

স্প্রিং AOP এ @Before অ্যানোটেশন ব্যবহার করার সাধারণ প্রক্রিয়া:

  1. অ্যাসপেক্ট তৈরি করা - @Aspect অ্যানোটেশন ব্যবহার করে একটি ক্লাস তৈরি করতে হবে।
  2. Before Advice সংজ্ঞায়িত করা - @Before অ্যানোটেশন ব্যবহার করে যে মেথডটি কল হওয়ার আগে কার্যকরী হবে তা নির্ধারণ করতে হবে।
  3. পয়েন্টকাট এক্সপ্রেশন ব্যবহার করা - কোন Join Point (যেমন মেথড কল) এ Before Advice কার্যকরী হবে তা নির্দিষ্ট করতে execution এক্সপ্রেশন ব্যবহার করতে হবে।

উদাহরণ: @Before Annotation দিয়ে Before Advice কনফিগার করা

ধরা যাক, আমরা একটি সার্ভিস ক্লাস তৈরি করতে যাচ্ছি, যেখানে কিছু মেথডে লগিং করতে চাই। এই লগিং কাজটি মেথড কল হওয়ার আগে হবে।

  1. Step 1: Create the Aspect Class with @Before Advice
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LoggingAspect {

    // Before advice
    @Before("execution(* com.example.service.*.*(..))") // Define pointcut expression
    public void logBefore() {
        System.out.println("A method is about to execute");
    }
}

এখানে:

  • @Aspect অ্যানোটেশন দ্বারা এই ক্লাসটি একটি অ্যাসপেক্ট হিসেবে চিহ্নিত করা হয়েছে।
  • @Before অ্যানোটেশন ব্যবহার করা হয়েছে, যার মাধ্যমে স্প্রিং জানিয়ে দেয় যে এই logBefore() মেথডটি execution(* com.example.service.*.*(..)) এই পয়েন্টকাট এক্সপ্রেশনের সাথে মিলিত হলে কার্যকরী হবে।
    • execution(* com.example.service.*.*(..)) পয়েন্টকাট এক্সপ্রেশন দ্বারা com.example.service প্যাকেজের সমস্ত মেথডের আগে logBefore() চালানো হবে।
  1. Step 2: Service Class Implementation
package com.example.service;

import org.springframework.stereotype.Service;

@Service
public class MyService {

    public void performTask() {
        System.out.println("Performing task in MyService.");
    }

    public void anotherTask() {
        System.out.println("Performing another task in MyService.");
    }
}

এখানে:

  • MyService ক্লাসে দুটি মেথড performTask() এবং anotherTask() আছে।
  • স্প্রিং AOP এর মাধ্যমে, LoggingAspect ক্লাসের logBefore() মেথডটি এই মেথডগুলির আগে কল হবে, এবং লগ মেসেজ প্রদর্শন করবে।
  1. Step 3: Spring Boot Configuration

স্প্রিং AOP কার্যকর করতে আপনাকে @EnableAspectJAutoProxy অ্যানোটেশন ব্যবহার করতে হবে স্প্রিং কনফিগারেশন ক্লাসে।

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@Configuration
@EnableAspectJAutoProxy // Enables AOP proxying in Spring
public class AppConfig {
}

এখানে:

  • @EnableAspectJAutoProxy স্প্রিং AOP-কে সক্ষম করে এবং অ্যাসপেক্ট প্রক্রিয়াকরণ নিশ্চিত করে।
  1. Step 4: Testing the Setup

আপনার SpringBootApplication বা টেস্ট ক্লাসে MyService ক্লাসটি কল করুন এবং Before Advice দেখতে পাবেন।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringAopApplication implements CommandLineRunner {

    @Autowired
    private MyService myService;

    public static void main(String[] args) {
        SpringApplication.run(SpringAopApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        myService.performTask();
        myService.anotherTask();
    }
}

এখানে:

  • performTask() এবং anotherTask() মেথড কল করার আগে logBefore() মেথডটি চালু হবে এবং লগ মেসেজ দেখাবে।

আউটপুট:

A method is about to execute
Performing task in MyService.
A method is about to execute
Performing another task in MyService.

@Before Annotation এর কিছু গুরুত্বপূর্ণ দিক

  • Pointcut Expression: @Before অ্যানোটেশনটি পয়েন্টকাট এক্সপ্রেশন ব্যবহার করে কনফিগার করা হয়। এটি মেথডের সিগনেচার (যেমন মেথড নাম, প্যারামিটার ইত্যাদি) দ্বারা নির্ধারণ করা হয়।
  • No Return Value: Before Advice মেথডের জন্য কোনো রিটার্ন ভ্যালু নেই, কারণ এটি শুধুমাত্র মেথড কল হওয়ার আগে কার্যকরী হয় এবং প্রোগ্রামের স্টেটকে পরিবর্তন করতে ব্যবহৃত হয় না।
  • Exception Handling: @Before অ্যানোটেশনের সাথে এক্সসেপশন হ্যান্ডলিং সমর্থিত নয়। তবে, মেথডের মধ্যে আপনি try-catch ব্যবহার করে এক্সসেপশন হ্যান্ডল করতে পারেন।

সারাংশ

@Before অ্যানোটেশন ব্যবহার করে স্প্রিং AOP-তে Before Advice কনফিগার করা হয়, যার মাধ্যমে একটি নির্দিষ্ট Join Point (যেমন মেথড কল) হওয়ার আগে কিছু কার্যকলাপ সম্পাদন করা সম্ভব হয়। এটি প্রোগ্রামিংয়ের ক্রস-কাটিং কনসার্ন যেমন লগিং, ট্রানজেকশন ম্যানেজমেন্ট বা সিকিউরিটি চেকিং বাস্তবায়ন করতে ব্যবহৃত হয়। AOP-এর মাধ্যমে কোডের ভেতরে সুনির্দিষ্ট কার্যকলাপগুলি অন্তর্ভুক্ত করা যায় যা মূল লজিকের বাইরে থাকে, ফলে কোড আরও পরিষ্কার, রক্ষণাবেক্ষণযোগ্য এবং পুনঃব্যবহারযোগ্য হয়।

Content added By
Promotion

Are you sure to start over?

Loading...