Java Technologies Custom Annotations তৈরি করা গাইড ও নোট

235

Guice Dependency Injection (DI) ফ্রেমওয়ার্কটি সাধারণভাবে annotation-based configuration সমর্থন করে, যা ডিপেনডেন্সি ইনজেকশন সহজ এবং সুসংগঠিত করে। Guice এ custom annotations তৈরি করা সম্ভব, যার মাধ্যমে আপনি নির্দিষ্ট কাজের জন্য ইনজেকশন গুলি কাস্টমাইজ করতে পারেন। উদাহরণস্বরূপ, আপনি একটি নির্দিষ্ট ডিপেনডেন্সি বা মেথড ইনজেকশন বিশেষভাবে চিহ্নিত করার জন্য কাস্টম অ্যানোটেশন তৈরি করতে পারেন।

এখানে আমরা দেখবো কিভাবে Guice-এ custom annotations তৈরি করা যায় এবং তাদের মাধ্যমে ডিপেনডেন্সি ইনজেকশন পরিচালনা করা যায়।


Custom Annotations তৈরি করার প্রক্রিয়া

1. Custom Annotation তৈরি করা

প্রথমে একটি কাস্টম অ্যানোটেশন তৈরি করতে হবে। এটি একটি সিম্পল Java অ্যানোটেশন হবে।

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)  // Annotation will be available at runtime
@Target(ElementType.FIELD)  // This annotation will be used on fields
public @interface MyCustomAnnotation {
}

এই অ্যানোটেশনটি @Retention(RetentionPolicy.RUNTIME) দিয়ে ডিফাইন করা হয়েছে, যার মানে এটি রানটাইমে অ্যাক্সেস করা যাবে। আমরা এটিকে @Target(ElementType.FIELD) দিয়ে ফিল্ডগুলিতে প্রয়োগ করতে পারব।


2. Injector এবং Module তৈরি করা

এখন আমরা Guice Module তৈরি করব, যা আমাদের কাস্টম অ্যানোটেশনকে বাইনড (bind) করবে।

import com.google.inject.AbstractModule;
import com.google.inject.BindingAnnotation;
import com.google.inject.Provides;

public class AppModule extends AbstractModule {
    @Override
    protected void configure() {
        // Bind the custom annotation to a specific class or instance
        bind(Service.class).annotatedWith(MyCustomAnnotation.class).to(ServiceImpl.class);
    }

    @Provides
    @MyCustomAnnotation
    public Service provideService() {
        return new ServiceImpl();  // Custom logic to provide Service instance
    }
}

এখানে, আমরা @MyCustomAnnotation ব্যবহার করে Service ইন্টারফেসের জন্য একটি নির্দিষ্ট ইমপ্লিমেন্টেশন (যেমন ServiceImpl) বাইন্ড করছি।


3. Service এবং ServiceImpl ক্লাস তৈরি করা

এখন আমাদের Service ইন্টারফেস এবং এর ServiceImpl ইমপ্লিমেন্টেশন তৈরি করতে হবে।

public interface Service {
    void execute();
}

public class ServiceImpl implements Service {
    @Override
    public void execute() {
        System.out.println("Service is executing...");
    }
}

এখানে Service একটি ইন্টারফেস এবং ServiceImpl তার বাস্তবায়ন।


4. Injector ব্যবহার করা এবং Custom Annotation দিয়ে ইনজেকশন করা

এখন Injector ব্যবহার করে Service ক্লাসের একটি ইন্সট্যান্স ইনজেক্ট করতে হবে, যেখানে আমাদের কাস্টম অ্যানোটেশন ব্যবহৃত হবে।

import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;

public class Application {

    // Inject the service with custom annotation
    @Inject
    @MyCustomAnnotation
    private static Service service;

    public static void main(String[] args) {
        // Create Injector and get instance of Service
        Injector injector = Guice.createInjector(new AppModule());
        
        // Retrieve the Service instance
        service = injector.getInstance(Service.class);
        service.execute();
    }
}

এখানে, আমরা @MyCustomAnnotation ব্যবহার করে Service কে ইনজেক্ট করছি। Guice Injector তা ডিপেনডেন্সি ইনজেক্ট করে।


কাস্টম অ্যানোটেশন ব্যবহারের সুবিধা

  1. Contextual Injection:
    • কাস্টম অ্যানোটেশন ব্যবহারের মাধ্যমে আপনি নির্দিষ্ট কনটেক্সট বা অবস্থায় ডিপেনডেন্সি ইনজেক্ট করতে পারেন। যেমন, একটি বিশেষ মডিউল বা স্কোপে ডিপেনডেন্সি ইনজেক্ট করা।
  2. Type-Safe Binding:
    • Guice এর কাস্টম অ্যানোটেশন ব্যবহার করে আপনি টাইপ সেফ ইনজেকশন পেতে পারেন, কারণ এটি আপনাকে সঠিকভাবে কোন ক্লাসের বা ডিপেনডেন্সির জন্য অ্যানোটেশন ইনজেক্ট করতে সহায়তা করে।
  3. Flexibility:
    • কাস্টম অ্যানোটেশন ব্যবহার করার মাধ্যমে, আপনি ডিপেনডেন্সি ইনজেকশনকে আরও কাস্টমাইজড এবং বিস্তারিতভাবে কনফিগার করতে পারবেন, যা সাধারণ DI পদ্ধতির বাইরে আরও ভালো ফলাফল দিতে পারে।
  4. Cleaner Code:
    • অ্যানোটেশন ব্যবহার করে আপনি কোডের কাঠামো পরিষ্কার রাখতে পারবেন এবং কনফিগারেশন ফাইল বা কোডের মাপ বেশি জটিল না হওয়া নিশ্চিত করতে পারবেন।

কাস্টম অ্যানোটেশন তৈরির আরও কিছু উদাহরণ

  1. Prototype Scoped Annotations:
    • আপনি যদি বিভিন্ন ডিপেনডেন্সি স্কোপ নির্ধারণ করতে চান, তাহলে কাস্টম অ্যানোটেশন ব্যবহার করে prototype বা singleton স্কোপ তৈরি করতে পারেন।
  2. Service Types:
    • আপনি যদি আপনার অ্যাপ্লিকেশনে বিভিন্ন ধরনের Service ইনজেক্ট করতে চান (যেমন, ProductionService এবং MockService), তাহলে আপনি কাস্টম অ্যানোটেশন ব্যবহার করে এগুলো আলাদা করতে পারেন।

Guice তে Custom Annotations ব্যবহার করার মাধ্যমে আপনি আপনার ডিপেনডেন্সি ইনজেকশন প্রক্রিয়া আরও সহজ, রিডেবল এবং কাস্টমাইজড করতে পারেন। কাস্টম অ্যানোটেশন ডিপেনডেন্সি ব্যবস্থাপনাকে আরও ক্লিন এবং মডুলার করতে সহায়ক। Guice এর সাথে এই ধরনের অ্যানোটেশন ব্যবহারে আপনি কাস্টম ডিপেনডেন্সি এবং বিভিন্ন স্কোপ এবং টাইপ সেফ ডিপেনডেন্সি ইনজেকশন তৈরি করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...