Guice এর মাধ্যমে Object Lifecycle কনফিগার করা

Guice এবং Lifecycle Management - গুইস (Guice) - Java Technologies

267

Guice একটি শক্তিশালী Dependency Injection (DI) ফ্রেমওয়ার্ক যা Java অ্যাপ্লিকেশনে ডিপেনডেন্সি ইনজেকশন ব্যবস্থাপনা সরবরাহ করে। Object Lifecycle কনফিগার করা হচ্ছে Guice এর গুরুত্বপূর্ণ বৈশিষ্ট্যগুলির মধ্যে একটি, যেখানে আপনি একটি নির্দিষ্ট অবজেক্টের জীবনকাল নির্ধারণ করতে পারেন, যেমন কখন তা তৈরি হবে, কখন ধ্বংস হবে, এবং কতবার ব্যবহার হবে। Guice বিভিন্ন ধরনের Scopes সাপোর্ট করে, যার মাধ্যমে আপনি ডিপেনডেন্সির জীবনকাল কাস্টমাইজ করতে পারবেন।

Guice এ Object Lifecycle কনফিগার করতে Scopes ব্যবহার করা হয়, এবং প্রতিটি স্কোপের জন্য অবজেক্টের জীবনকাল এবং ব্যবহারের পরিমাণ নির্ধারণ করা হয়।


Guice-এ Object Lifecycle এর প্রধান Concepts

  1. Singleton Scope:
    • Singleton স্কোপে, একটি ক্লাসের শুধুমাত্র একটি ইনস্ট্যান্স তৈরি করা হয় এবং এটি অ্যাপ্লিকেশনের পুরো জীবনকালে পুনরায় ব্যবহার করা হয়।
  2. Prototype Scope:
    • Prototype স্কোপে, প্রতি ডিপেনডেন্সি রিকোয়েস্টের জন্য একটি নতুন ইনস্ট্যান্স তৈরি করা হয়। এর মানে হল যে, আপনি যতবার একটি নির্দিষ্ট ক্লাসের ইনস্ট্যান্স রিকুয়েস্ট করবেন, ততবার একটি নতুন অবজেক্ট তৈরি হবে।
  3. Custom Scopes:
    • Guice আপনাকে custom scopes তৈরি করার অনুমতি দেয়, যেখানে আপনি নিজের প্রয়োজন অনুসারে স্কোপ কনফিগার করতে পারেন। উদাহরণস্বরূপ, আপনি একটি session scope বা request scope তৈরি করতে পারেন যা ওয়েব অ্যাপ্লিকেশনে ব্যবহার উপযোগী হতে পারে।

1. Singleton Scope এর উদাহরণ

Singleton Scope Guice এ খুবই সাধারণ এবং ব্যবহৃত স্কোপ, যেখানে একই ক্লাসের একটি ইনস্ট্যান্স কেবল একবার তৈরি হয় এবং এটি অ্যাপ্লিকেশনের বাকি অংশে পুনরায় ব্যবহার করা হয়।

কোড উদাহরণ:

import com.google.inject.AbstractModule;
import com.google.inject.Singleton;

public class AppModule extends AbstractModule {
    @Override
    protected void configure() {
        // Singleton scope for MyService
        bind(MyService.class).in(Singleton.class);
    }
}

public class MyService {
    public void execute() {
        System.out.println("Service executed");
    }
}

Main Class (Application)

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

public class Application {
    public static void main(String[] args) {
        Injector injector = Guice.createInjector(new AppModule());
        MyService service1 = injector.getInstance(MyService.class);
        MyService service2 = injector.getInstance(MyService.class);

        // Both service1 and service2 will refer to the same instance
        service1.execute();
        System.out.println(service1 == service2);  // Output: true
    }
}

এখানে, MyService ক্লাসটি Singleton স্কোপে বাইনড করা হয়েছে। এর মানে হলো, Guice কেবল একটি MyService ইনস্ট্যান্স তৈরি করবে এবং দুইটি আলাদা রিকোয়েস্টে একই ইনস্ট্যান্সটি প্রদান করবে।


2. Prototype Scope এর উদাহরণ

Prototype Scope ব্যবহারের ক্ষেত্রে, আপনি যতবার একটি ক্লাসের ইনস্ট্যান্স রিকোয়েস্ট করবেন, ততবার Guice নতুন একটি অবজেক্ট তৈরি করবে।

কোড উদাহরণ:

import com.google.inject.AbstractModule;

public class AppModule extends AbstractModule {
    @Override
    protected void configure() {
        // Prototype scope for MyService
        bind(MyService.class).to(MyService.class);  // By default, this is prototype scope
    }
}

public class MyService {
    public void execute() {
        System.out.println("Service executed");
    }
}

Main Class (Application)

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

public class Application {
    public static void main(String[] args) {
        Injector injector = Guice.createInjector(new AppModule());
        MyService service1 = injector.getInstance(MyService.class);
        MyService service2 = injector.getInstance(MyService.class);

        // Each service will be a different instance
        service1.execute();
        service2.execute();
        System.out.println(service1 == service2);  // Output: false
    }
}

এখানে, Prototype স্কোপ ব্যবহৃত হয়েছে, যা নিশ্চিত করে যে service1 এবং service2 দুটি আলাদা ইনস্ট্যান্স হবে।


3. Custom Scopes (Request, Session, etc.)

Guice আপনাকে custom scopes তৈরি করার অনুমতি দেয়, যার মাধ্যমে আপনি request scope, session scope, অথবা আপনার নিজস্ব স্কোপ তৈরি করতে পারেন।

Custom Scope তৈরি করা

import com.google.inject.Scope;
import com.google.inject.spi.Provider;
import com.google.inject.Inject;

public class RequestScope implements Scope {
    // Custom scope implementation logic
    @Override
    public <T> Provider<T> scope(Key<T> key, Provider<T> unscoped) {
        return () -> {
            // Return a new instance for each request
            return unscoped.get();
        };
    }
}

Module এ Custom Scope ব্যবহার করা

import com.google.inject.AbstractModule;

public class AppModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(MyService.class).in(RequestScope.class);
    }
}

এখানে, RequestScope হল একটি কাস্টম স্কোপ, যেখানে ইনস্ট্যান্সগুলি প্রতি রিকোয়েস্টে নতুনভাবে তৈরি হয়। এটি সাধারণত ওয়েব অ্যাপ্লিকেশনে ব্যবহার করা হয়, যেখানে প্রতি HTTP রিকোয়েস্টে একটি নতুন অবজেক্ট প্রয়োজন হয়।


4. Lifecycle Methods (Start, Stop, etc.)

Guice কিছু Lifecycle Methods সাপোর্ট করে যা আপনাকে অবজেক্টের জীবনকাল এবং ব্যবহার পরবর্তী কার্যকলাপ পরিচালনা করতে সহায়তা করে। উদাহরণস্বরূপ, কিছু অবজেক্ট স্টার্ট এবং স্টপ সময়সীমায় নির্দিষ্ট কার্যকলাপ পরিচালনা করতে পারে।

Lifecycle Methods ব্যবহার:

import com.google.inject.Inject;

public class MyService {
    @Inject
    public MyService() {
        // Initialization logic
    }

    public void start() {
        System.out.println("Service started");
    }

    public void stop() {
        System.out.println("Service stopped");
    }
}

এখানে start() এবং stop() মেথড গুলি লifecycle পরিচালনা করতে ব্যবহৃত হয়, যাতে অবজেক্টটি প্রপারলি ইন্সট্যানশিয়েট এবং ডিস্ট্রয় হতে পারে।


Guice-এ Object Lifecycle কনফিগার করা অত্যন্ত গুরুত্বপূর্ণ একটি বিষয়, যা DI ব্যবস্থাপনাকে আরও শক্তিশালী ও কার্যকর করে তোলে। Guice বিভিন্ন scopes সরবরাহ করে, যেমন Singleton, Prototype, এবং Custom Scopes, যা আপনাকে অবজেক্টের জীবনকাল নিয়ন্ত্রণ করতে সহায়তা করে। এগুলি অ্যাপ্লিকেশন স্থিতিশীলতা, পারফরম্যান্স এবং মেমরি ব্যবস্থাপনাকে উন্নত করতে সাহায্য করে। Guice এর Object Lifecycle কনফিগারেশন অত্যন্ত ফ্লেক্সিবল, এবং বিভিন্ন প্রয়োজনে এটি কার্যকরী হয়ে থাকে।

Content added By
Promotion

Are you sure to start over?

Loading...