Java Technologies @Assisted Annotation এর ব্যবহার গাইড ও নোট

276

@Assisted অ্যানোটেশনটি Guice-এর AssistedInject ফিচারের সাথে ব্যবহৃত হয়। এটি বিশেষভাবে তখন কাজে আসে যখন আপনার কনস্ট্রাক্টরের কিছু ইনপুট মান ডায়নামিকভাবে তৈরি হয় এবং Guice এর মাধ্যমে ইঞ্জেক্ট করা সম্ভব নয়, যেমন কিছু ফিল্ড যেগুলি রানটাইমে পাস করা হয়। এটি Guice Assisted Injection নামে পরিচিত এবং বিশেষভাবে কার্যকরী যখন আপনি ম্যানুয়ালি তৈরি করা ডিপেনডেন্সি ইনজেক্ট করতে চান।

Guice এ @Assisted এর মাধ্যমে আপনি এমন অবজেক্ট বা ডিপেনডেন্সি তৈরি করতে পারেন যেগুলি Guice বা কোন সরাসরি @Inject এ ইনজেক্ট করা সম্ভব নয়। এটি ডিপেনডেন্সি ইনজেকশনের জন্য constructor injection পদ্ধতি ব্যবহার করতে সহায়তা করে, যখন কিছু ইনপুট বাইরের উৎস থেকে বা রানটাইমে পাওয়া যায়।

AssistedInject ব্যবহার করার উদাহরণ

ধরা যাক, আপনি একটি UserService ক্লাস তৈরি করতে চান, যার কনস্ট্রাক্টরে কিছু ডাইনামিক প্যারামিটার পাস করতে হবে, যেমন একটি username এবং age যা Guice এর মাধ্যমে ইনজেক্ট করা যাবে না। তবে AssistedInject ব্যবহার করে এটি সম্ভব করা যায়।


Step 1: Interface এবং Concrete Class তৈরি

প্রথমে, একটি UserService ইন্টারফেস এবং তার কনক্রিট (Concrete) ক্লাস তৈরি করি:

public interface UserService {
    void createUser(String username, int age);
}

এবং তার কনক্রিট ইমপ্লিমেন্টেশন:

public class UserServiceImpl implements UserService {
    private final String username;
    private final int age;

    // Guice এর মাধ্যমে ইনজেক্ট করা হবে না, বরং @Assisted দিয়ে পাস করা হবে
    @Inject
    public UserServiceImpl(@Assisted String username, @Assisted int age) {
        this.username = username;
        this.age = age;
    }

    @Override
    public void createUser(String username, int age) {
        System.out.println("User created with username: " + username + " and age: " + age);
    }
}

এখানে, @Assisted অ্যানোটেশন ব্যবহার করা হয়েছে username এবং age প্যারামিটারগুলির জন্য। এই প্যারামিটারগুলি Guice স্বয়ংক্রিয়ভাবে ইনজেক্ট করবে না, বরং runtime এ ইনজেক্ট করতে হবে।


Step 2: Guice Module এ AssistedInject ব্যবহার করা

এখন, Guice Module এ AssistedInject এবং Factory তৈরি করতে হবে, যাতে এই ডিপেনডেন্সিগুলি পাস করা যায়।

import com.google.inject.AbstractModule;
import com.google.inject.assistedinject.FactoryModuleBuilder;

public class AppModule extends AbstractModule {
    @Override
    protected void configure() {
        // FactoryModuleBuilder ব্যবহার করে AssistedInject এর জন্য Factory তৈরি করা
        install(new FactoryModuleBuilder().build(UserServiceFactory.class));
    }
}

এখানে, FactoryModuleBuilder ব্যবহার করা হয়েছে যাতে UserServiceFactory নামক একটি Factory ইন্টারফেস তৈরি করা যায়, যা রানটাইমে ডাইনামিকভাবে প্যারামিটার ইনজেক্ট করতে সহায়তা করবে।


Step 3: Factory Interface তৈরি

এখন, আমরা UserServiceFactory ইন্টারফেস তৈরি করবো যা UserService ইন্সট্যান্স তৈরি করবে:

import com.google.inject.assistedinject.Assisted;

public interface UserServiceFactory {
    UserService create(@Assisted String username, @Assisted int age);
}

এখানে, @Assisted অ্যানোটেশন ব্যবহার করে কনস্ট্রাক্টরের প্যারামিটারগুলির জন্য একটি ফ্যাক্টরি তৈরি করা হচ্ছে।


Step 4: Main ক্লাসে Guice Injector তৈরি করা

এখন, Guice Injector তৈরি করে ফ্যাক্টরি থেকে ইনস্ট্যান্স তৈরি করবো।

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

public class Main {
    public static void main(String[] args) {
        // Guice Injector তৈরি
        Injector injector = Guice.createInjector(new AppModule());

        // UserServiceFactory ব্যবহার করে UserService তৈরি
        UserServiceFactory userServiceFactory = injector.getInstance(UserServiceFactory.class);

        // UserService তৈরি এবং ব্যবহার
        UserService userService = userServiceFactory.create("john_doe", 30);
        userService.createUser("john_doe", 30);
    }
}

এখানে, UserServiceFactory এর মাধ্যমে UserServiceImpl এর একটি ইনস্ট্যান্স তৈরি করা হচ্ছে এবং ডাইনামিকভাবে username এবং age প্যারামিটার পাস করা হচ্ছে।


AssistedInject এর সুবিধা এবং প্রয়োজনীয়তা

  1. ডাইনামিক ইনজেকশন:
    • যখন আপনাকে রানটাইমে নির্দিষ্ট কিছু ইনপুট ইনজেক্ট করতে হয়, যা Guice এর মাধ্যমে ইনজেক্ট করা সম্ভব নয়, তখন @Assisted ব্যবহার করা হয়।
  2. Factory ব্যবহার:
    • Factory এর মাধ্যমে Guice ডিপেনডেন্সি তৈরি করতে পারে এবং ডাইনামিক প্যারামিটার ইনজেক্ট করতে সহায়ক হয়।
  3. ব্যবহারযোগ্যতা:
    • এটি এমন সময় খুবই কার্যকরী যখন আপনার কনস্ট্রাক্টরের কিছু মান কেবল চলমান সময়ে পাস করতে হবে, যেমন ইউজার ইনপুট।
  4. ক্লিন এবং সংক্ষিপ্ত কোড:
    • FactoryModuleBuilder এবং AssistedInject ব্যবহার করে কোড ক্লিন এবং আরও ভালভাবে সংগঠিত হয়।

Guice-এর @Assisted অ্যানোটেশন এবং AssistedInject ফিচার একটি শক্তিশালী টুল যা আপনাকে ডিপেনডেন্সি ইনজেকশনে ডাইনামিক প্যারামিটার ইনজেক্ট করতে সহায়তা করে। এটি বিশেষ করে তখনই দরকার হয় যখন ডিপেনডেন্সিগুলি রানটাইমে পাস করতে হয় এবং Guice এর স্বাভাবিক ইনজেকশন মেকানিজমের মাধ্যমে ইনজেক্ট করা সম্ভব নয়। @Assisted এবং FactoryModuleBuilder এর সাহায্যে, আপনি আরও নমনীয়, পরিষ্কার এবং শক্তিশালী ডিপেনডেন্সি ম্যানেজমেন্ট করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...