Java Technologies উদাহরণ সহ CDI Integration গাইড ও নোট

443

CDI (Contexts and Dependency Injection) একটি Java EE (Jakarta EE) স্পেসিফিকেশন যা ডিপেনডেন্সি ইনজেকশন এবং কনটেক্সট পরিচালনার জন্য ব্যবহৃত হয়। MapStruct এর সাথে CDI ইন্টিগ্রেশন সাধারণত Spring বা CDI Containers এর সাথে ব্যবহার করা হয়, যেখানে MapStruct Bean হিসেবে ব্যবহৃত হয় এবং CDI এর মাধ্যমে এটি স্বয়ংক্রিয়ভাবে ইনজেক্ট করা হয়।

এখানে, আমরা CDI Integration এর মাধ্যমে MapStruct এর উদাহরণ সহ ব্যবহারের পদ্ধতি দেখব।


১. MapStruct CDI Integration Overview

MapStruct এর সাথে CDI ইন্টিগ্রেশন আপনাকে MapStruct এর Mapper Interface কে CDI Beans হিসেবে ব্যবহারের সুবিধা দেয়। এর মানে হল যে আপনি আপনার প্রোজেক্টে CDI Container এর মাধ্যমে মেথডগুলো ইনজেক্ট করতে পারবেন এবং বিভিন্ন Scope এর মধ্যে ম্যাপিং ফাংশনালিটি ব্যবহার করতে পারবেন।

MapStruct এর CDI ইন্টিগ্রেশন সুবিধা:

  1. Automatic Dependency Injection: CDI ব্যবহার করে আপনার Mapper ইন্টারফেসকে স্বয়ংক্রিয়ভাবে ইনজেক্ট করা যায়।
  2. Decoupling: মডিউল এবং ক্লাসগুলির মধ্যে ডিপেনডেন্সি কমিয়ে আনে।
  3. Ease of Use: Spring বা JEE (Java EE) সাপোর্ট করে, যাতে নির্দিষ্ট ডিপেনডেন্সি ইনজেকশন কার্যকরী হয়।

২. MapStruct CDI Integration এর জন্য কনফিগারেশন

MapStruct CDI Integration করার জন্য, MapStruct Mapper ইন্টারফেসে componentModel = "cdi" যুক্ত করতে হয়, যা MapStruct কে CDI Bean হিসেবে কনফিগার করে। এর মাধ্যমে CDI Container এ MapStruct Mapper ইন্টারফেসটিকে স্বয়ংক্রিয়ভাবে ইনজেক্ট করা যাবে।

উদাহরণ: CDI Integration

২.১ CDI Mapper Interface কনফিগারেশন
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

@Mapper(componentModel = "cdi")
public interface PersonMapper {
    PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);
    
    PersonDTO personToPersonDTO(Person person);
}

এখানে, componentModel = "cdi" ব্যবহার করা হয়েছে যা MapStruct কে CDI Bean হিসেবে কনফিগার করে।

২.২ CDI Bean ইনজেকশন Example

CDI ব্যবহারের মাধ্যমে MapStruct Mapper ইনজেক্ট করার উদাহরণ:

import javax.inject.Inject;
import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class PersonService {

    @Inject
    private PersonMapper personMapper; // CDI এর মাধ্যমে MapStruct Mapper ইনজেক্ট করা হচ্ছে
    
    public PersonDTO convertToDTO(Person person) {
        return personMapper.personToPersonDTO(person);
    }
}

এখানে, PersonService ক্লাসে PersonMapper কে @Inject অ্যানোটেশন দিয়ে CDI এর মাধ্যমে ইনজেক্ট করা হয়েছে। এর মাধ্যমে PersonMapper কে PersonService এ ব্যবহার করা যাবে।


৩. CDI Managed Bean সিস্টেমে MapStruct ব্যবহার

আপনি CDI প্রোজেক্টে MapStruct ব্যবহার করতে চাইলে, প্রথমে componentModel = "cdi" ব্যবহার করে Mapper ইন্টারফেস কনফিগার করুন, তারপরে এটিকে CDI Bean হিসেবে ইনজেক্ট করুন। এই কনফিগারেশনটি EJB, CDI Managed Beans এবং JAX-RS বা Servlet এর মধ্যে ব্যবহৃত হতে পারে।

উদাহরণ: CDI Bean এ MapStruct এর ব্যবহার

  1. Person.java (Entity)
public class Person {
    private String name;
    private int age;

    // Getters and Setters
}
  1. PersonDTO.java (DTO)
public class PersonDTO {
    private String fullName;
    private int age;

    // Getters and Setters
}
  1. PersonMapper.java (MapStruct Mapper Interface)
import org.mapstruct.Mapper;

@Mapper(componentModel = "cdi")
public interface PersonMapper {
    PersonDTO personToPersonDTO(Person person);
}
  1. PersonService.java (CDI Bean)
import javax.inject.Inject;
import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class PersonService {

    @Inject
    private PersonMapper personMapper;

    public PersonDTO convertToDTO(Person person) {
        return personMapper.personToPersonDTO(person);
    }
}

এখানে, PersonMapper CDI এর মাধ্যমে PersonService ক্লাসে ইনজেক্ট করা হয়েছে এবং convertToDTO() মেথডে MapStruct এর মাধ্যমে ম্যাপিং করা হচ্ছে।


৪. CDI Container Configuration

MapStruct এর সাথে CDI Integration কার্যকর করার জন্য আপনার CDI Container যেমন Weld, OpenWebBeans, বা GlassFish এ কনফিগার করতে হবে। প্রোজেক্টে CDI ইন্টিগ্রেশন করার জন্য আপনাকে সঠিক CDI Implementation যোগ করতে হবে।

Maven Dependency for CDI:

<dependencies>
    <!-- CDI API Dependency -->
    <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <version>2.0</version>
    </dependency>
    
    <!-- CDI Implementation (Weld) Dependency -->
    <dependency>
        <groupId>org.jboss.weld.api</groupId>
        <artifactId>weld-api</artifactId>
        <version>3.1.6.Final</version>
    </dependency>
</dependencies>

এখানে, cdi-api এবং weld-api CDI সাপোর্ট করার জন্য প্রোজেক্টে অন্তর্ভুক্ত করা হয়েছে।


৫. MapStruct এবং CDI এর সুবিধা

  1. Automatic Dependency Injection: CDI ব্যবহার করে MapStruct Mapper ইন্টারফেসকে ইনজেক্ট করা যায়।
  2. Simplified Dependency Management: আপনি ম্যানুয়ালি ম্যাপার তৈরি বা ইনস্ট্যান্সিয়েট করার পরিবর্তে CDI ব্যবহার করে স্বয়ংক্রিয়ভাবে MapStruct ইনজেক্ট করতে পারবেন।
  3. Loose Coupling: এটি ক্লাসগুলির মধ্যে সুনির্দিষ্ট ডিপেনডেন্সি কমিয়ে আনে, যার ফলে কোড মেইন্টেনেন্স সহজ হয়।
  4. Scoped Beans: CDI Beans এর মাধ্যমে, MapStruct ইন্টারফেসের জন্য নির্দিষ্ট স্কোপ ব্যবহার করা যেতে পারে (যেমন RequestScoped, SessionScoped, বা ApplicationScoped)।

সারাংশ

MapStruct এর সাথে CDI Integration ব্যবহার করে আপনি স্বয়ংক্রিয়ভাবে MapStruct Mapper ইন্টারফেসকে CDI Beans হিসেবে ইন্টিগ্রেট করতে পারেন, যা আপনার প্রোজেক্টে ডিপেনডেন্সি ইনজেকশন সহজ করে তোলে। এটি MapStruct এর ম্যাপিং ক্ষমতা এবং CDI এর ডিপেনডেন্সি ইনজেকশন ফিচার একত্রিত করে এবং আপনাকে আরও পরিষ্কার এবং উন্নত কনফিগারেশন প্রদান করে। এই ইন্টিগ্রেশন বিশেষভাবে Java EE বা Jakarta EE ভিত্তিক অ্যাপ্লিকেশন ডেভেলপমেন্টে উপকারী।


Content added By
Promotion

Are you sure to start over?

Loading...