Java Technologies @Mapper(componentModel = "spring") এর ব্যবহার গাইড ও নোট

272

MapStruct একটি Java annotation processor ভিত্তিক টুল যা JavaBeans (POJOs) এর মধ্যে ডেটা ম্যাপিং করে থাকে। @Mapper(componentModel = "spring") অ্যানোটেশনটি MapStruct ইন্টারফেসের মধ্যে ব্যবহার করা হয় এবং এটি MapStruct কে Spring ফ্রেমওয়ার্কের সাথে ইন্টিগ্রেট করার জন্য ব্যবহৃত হয়। এই কনফিগারেশনের মাধ্যমে MapStruct স্বয়ংক্রিয়ভাবে Spring Bean হিসেবে ম্যাপিং ক্লাসটিকে রেজিস্টার করে, যাতে সহজেই Spring context এ ইনজেক্ট করা যায়।

এটি বিশেষভাবে Spring Boot অ্যাপ্লিকেশনগুলিতে MapStruct ব্যবহার করার জন্য কার্যকরী, কারণ Spring Framework আপনাকে dependency injection এর মাধ্যমে মাপিং অবজেক্ট স্বয়ংক্রিয়ভাবে ইনজেক্ট করতে সহায়তা করে।


১. @Mapper(componentModel = "spring") এর ভূমিকা

  • componentModel = "spring" সেট করা হলে, MapStruct Spring Bean হিসেবে কাজ করবে।
  • এটি @Autowired সহ Spring context এ ম্যাপিং ক্লাসের ইনস্ট্যান্সকে স্বয়ংক্রিয়ভাবে ইনজেক্ট করতে সহায়তা করে।
  • এর মাধ্যমে MapStruct এর মাধ্যমে তৈরি করা Mapper ইন্টারফেসটি Spring Beans হিসেবে রেজিস্টার হয় এবং Spring এর dependency injection প্রক্রিয়ার মধ্যে ব্যবহার করা যায়।

২. @Mapper(componentModel = "spring") কনফিগারেশন উদাহরণ

ধরা যাক, আমরা একটি Spring Boot অ্যাপ্লিকেশনে MapStruct ব্যবহার করছি এবং আমাদের একটি Person অবজেক্টকে PersonDTO তে ম্যাপ করতে হবে।

Step 1: Maven ডিপেনডেন্সি যোগ করা

pom.xml ফাইলে MapStruct এর ডিপেনডেন্সি যোগ করুন।

<dependencies>
    <!-- MapStruct Dependency -->
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>1.5.2.Final</version>
    </dependency>

    <!-- MapStruct Processor for compile-time code generation -->
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>1.5.2.Final</version>
        <scope>provided</scope>
    </dependency>

    <!-- Spring Boot Dependency (if needed) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
</dependencies>

Step 2: MapStruct Mapper ইন্টারফেস তৈরি করা

এখন, MapStruct মেপার ইন্টারফেস তৈরি করুন এবং @Mapper(componentModel = "spring") অ্যানোটেশন যোগ করুন।

import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import org.springframework.stereotype.Component;

@Mapper(componentModel = "spring") // This makes the Mapper a Spring Bean
public interface PersonMapper {
    PersonMapper INSTANCE = Mappers.getMapper(PersonMapper.class);

    PersonDTO personToPersonDTO(Person person);
}

এখানে, @Mapper(componentModel = "spring") ব্যবহার করা হয়েছে, যাতে PersonMapper ইন্টারফেসটি Spring Bean হিসেবে রেজিস্টার হয়।

Step 3: DTO ক্লাস তৈরি করা

এখন, Person এবং PersonDTO ক্লাস তৈরি করুন।

Person.java:

public class Person {
    private String name;
    private int age;

    // Getters and Setters
}

PersonDTO.java:

public class PersonDTO {
    private String name;
    private int age;

    // Getters and Setters
}

Step 4: Spring Service এ Mapper ইনজেক্ট করা

এখন, Spring Service ক্লাসে PersonMapper ইনজেক্ট করুন।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class PersonService {

    private final PersonMapper personMapper;

    @Autowired
    public PersonService(PersonMapper personMapper) {
        this.personMapper = personMapper;
    }

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

এখানে, PersonMapper কে @Autowired এর মাধ্যমে Spring context থেকে ইনজেক্ট করা হয়েছে।

Step 5: Spring Boot Application

এখন, Spring Boot অ্যাপ্লিকেশনে এটি ব্যবহার করা যেতে পারে।

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 Application implements CommandLineRunner {

    @Autowired
    private PersonService personService;

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

    @Override
    public void run(String... args) throws Exception {
        Person person = new Person();
        person.setName("John Doe");
        person.setAge(30);

        PersonDTO personDTO = personService.convertToDTO(person);
        System.out.println("Person DTO Name: " + personDTO.getName());
        System.out.println("Person DTO Age: " + personDTO.getAge());
    }
}

এখানে, CommandLineRunner ইন্টারফেস ব্যবহার করে আমরা Person অবজেক্টকে PersonDTO তে কনভার্ট করেছি এবং প্রিন্ট করেছি।


৩. @Mapper(componentModel = "spring") এর সুবিধা

  1. Spring Integration: এটি Spring ফ্রেমওয়ার্কের সাথে সহজভাবে ইন্টিগ্রেট করতে সাহায্য করে এবং dependency injection এর মাধ্যমে MapStruct এর মাপিং অবজেক্ট স্বয়ংক্রিয়ভাবে ইনজেক্ট করা যায়।
  2. Cleaner Code: Mapper ক্লাসে @Mapper(componentModel = "spring") যোগ করলে Spring এর মধ্যে MapStruct ইন্টারফেস স্বয়ংক্রিয়ভাবে রেজিস্টার হয়ে যায়, যা কোডের পরিস্কারতা এবং কার্যকারিতা বৃদ্ধি করে।
  3. Easier Testing: MapStruct এর Spring Bean হিসেবে ব্যবহৃত হওয়ার ফলে, আপনি সহজেই এটি Unit Test করতে পারেন।
  4. No Boilerplate Code: MapStruct এর মাধ্যমে স্বয়ংক্রিয়ভাবে কোড জেনারেট করা হয়, ফলে আপনাকে ম্যানুয়ালি কোন ম্যাপিং কোড লেখার প্রয়োজন হয় না।

৪. নির্ধারিত পরিবেশে @Mapper(componentModel = "spring") এর ব্যবহার

  1. Spring Boot: Spring Boot অ্যাপ্লিকেশনগুলিতে MapStruct দ্রুত এবং সহজে ইন্টিগ্রেট করা যায়।
  2. Spring Framework: Spring Framework ব্যবহারের সময় MapStruct খুব সহজে Spring Beans হিসাবে ব্যবহৃত হতে পারে।

সারাংশ

@Mapper(componentModel = "spring") এর মাধ্যমে MapStruct মেপার ইন্টারফেসকে Spring Bean হিসেবে রেজিস্টার করা হয়। এটি Spring ফ্রেমওয়ার্কে ব্যবহার করা হলে, আপনি dependency injection এর মাধ্যমে MapStruct মেপিং অবজেক্ট স্বয়ংক্রিয়ভাবে ইনজেক্ট করতে পারেন, যা কোড ক্লিন এবং কার্যকরী করে তোলে। MapStruct এর মাধ্যমে Spring অ্যাপ্লিকেশনগুলিতে ম্যাপিং কোড খুব সহজেই তৈরি করা যায়, যা উন্নত পারফরম্যান্স এবং উন্নত এক্সপ্যান্সিবিলিটি প্রদান করে।


Content added By
Promotion

Are you sure to start over?

Loading...