MapStruct একটি শক্তিশালী Java annotation processor যা POJOs (Plain Old Java Objects) এর মধ্যে ম্যাপিং প্রক্রিয়া সহজ এবং দ্রুত করে তোলে। CDI (Contexts and Dependency Injection) হল Java EE (Enterprise Edition) এর একটি অংশ যা ডিপেনডেন্সি ইনজেকশন, কনটেক্সট ম্যানেজমেন্ট এবং এলিভেশন সম্পর্কিত সুবিধা প্রদান করে।
MapStruct এবং CDI একসাথে ব্যবহার করা যেতে পারে, যা আপনাকে স্বয়ংক্রিয়ভাবে MapStruct এর ম্যাপিং ফাংশনালিটি Spring বা Java EE কনটেক্সটে ইনজেক্ট করতে সহায়তা করে। এতে MapStruct মেপিং ফাংশনগুলি CDI কনটেক্সটে একটি Spring Bean বা CDI Bean হিসেবে ইনজেক্ট করা সম্ভব হয়।
Contexts and Dependency Injection (CDI) হল একটি কনটেইনার ভিত্তিক ডিপেনডেন্সি ইনজেকশন ফ্রেমওয়ার্ক যা Java EE অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়। CDI প্রধানত তিনটি কাজ সম্পাদন করে:
MapStruct এবং CDI একসাথে ব্যবহৃত হলে, MapStruct মাপিং ইন্টারফেসগুলিকে CDI Beans হিসেবে তৈরি করা যায়, যা Spring Beans এর মত স্বয়ংক্রিয়ভাবে ইনজেক্ট করা সম্ভব হয়। এটি একটি খুবই কার্যকরী পদ্ধতি, বিশেষত যখন আপনাকে MapStruct এর মেপিং কোডকে CDI কনটেইনারে ব্যবহার করতে হয়।
যখন আপনি MapStruct কে CDI (Contexts and Dependency Injection) সাথে ব্যবহার করতে চান, তখন আপনাকে componentModel = "cdi"
কনফিগারেশন ব্যবহার করতে হবে। এটি CDI কনটেইনারে MapStruct মেথডকে একটি Bean হিসেবে ইনজেক্ট করে।
এখানে একটি উদাহরণ দেয়া হলো যেখানে MapStruct এবং CDI একসাথে ব্যবহার করা হয়েছে।
ধরা যাক, আমাদের দুটি JavaBean রয়েছে: Person এবং PersonDTO, এবং আমরা তাদের মধ্যে ম্যাপিং করতে চাই। আমরা MapStruct কে CDI Beans হিসেবে ব্যবহার করব।
Person.java (Domain Object):
public class Person {
private String name;
private int age;
// Getters and Setters
}
PersonDTO.java (DTO):
public class PersonDTO {
private String name;
private int age;
// Getters and Setters
}
PersonMapper.java (MapStruct 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 Mapper কে CDI Bean হিসেবে তৈরি করেছি, যাতে এটি CDI কনটেইনারে সহজে ইনজেক্ট করা যায়।
CDI এর মাধ্যমে PersonMapper ইনজেক্ট করা এবং ব্যবহার করা:
import javax.inject.Inject;
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class PersonService {
@Inject
private PersonMapper personMapper;
public PersonDTO convertPersonToDTO(Person person) {
return personMapper.personToPersonDTO(person);
}
}
এখানে, @Inject অ্যানোটেশন ব্যবহার করে PersonMapper কে CDI কনটেইনার থেকে ইনজেক্ট করা হয়েছে। এতে, MapStruct এর personToPersonDTO
মেথড CDI Bean হিসেবে ব্যবহার করা সম্ভব হয়েছে।
MapStruct ব্যবহার করার সময় CDI Beans এর জন্য MapStruct কে সঠিকভাবে কনফিগার করা গুরুত্বপূর্ণ। componentModel = "cdi"
কনফিগারেশন CDI কনটেইনারের সাথে ইন্টিগ্রেশন সমর্থন করে এবং Spring Bean এর মতো কাজ করে।
@Mapper(componentModel = "cdi")
public interface PersonMapper {
PersonDTO personToPersonDTO(Person person);
}
এখানে, componentModel = "cdi"
মানে হল যে MapStruct এর মাধ্যমে তৈরি করা মেপিং ইন্টারফেসটি CDI কনটেইনারের মধ্যে ইনজেক্ট হতে সক্ষম।
MapStruct এবং CDI (Contexts and Dependency Injection) একত্রে ব্যবহৃত হলে MapStruct এর মাধ্যমে তৈরি করা মেপিং ইন্টারফেসগুলো CDI Beans হিসেবে ইনজেক্ট করা যায়। এটি আপনাকে Java EE বা Spring অ্যাপ্লিকেশনগুলিতে ডিপেনডেন্সি ইনজেকশন সুবিধা নিয়ে মডেল মাপিংয়ের কাজ আরও সহজ এবং কার্যকরী করে তোলে। এর মাধ্যমে MapStruct এর ম্যাপিং মেথডগুলি সহজে CDI কনটেইনারে ব্যবহৃত হতে পারে এবং automatic dependency injection এর সুবিধা পাওয়া যায়।
CDI (Contexts and Dependency Injection) হল একটি Java EE (Enterprise Edition) ফিচার যা ডিপেনডেন্সি ইনজেকশন, স্কোপ, এবং জীবনচক্র পরিচালনা করার জন্য ব্যবহৃত হয়। এটি Java EE ফ্রেমওয়ার্কের অংশ এবং Java SE (Standard Edition) এও ব্যবহার করা যায়। CDI ডিপেনডেন্সি ইনজেকশন (DI) ব্যবস্থার মাধ্যমে অবজেক্ট তৈরি, ম্যানেজমেন্ট এবং তার জীবনচক্র নিয়ন্ত্রণে সহায়তা করে, যা সফটওয়্যার ডেভেলপমেন্টে নমনীয়তা এবং মডুলারিটি বৃদ্ধি করে।
MapStruct এর মাধ্যমে CDI ব্যবহারের ফলে, MapStruct এর মাপিং ফাংশনগুলো সহজেই CDI কন্টেইনারের মাধ্যমে ম্যানেজ করা এবং ইনজেক্ট করা সম্ভব হয়। এটি MapStruct মেপারগুলোর স্বয়ংক্রিয়ভাবে Spring বা CDI কন্টেইনারের মধ্যে যুক্ত হওয়ার সুবিধা দেয়।
CDI হল Java-এর একটি স্পেসিফিকেশন যা dependency injection এবং contextual lifecycle management-কে সমর্থন করে। এটি ক্লাসগুলির মধ্যে ডিপেনডেন্সি ইনজেকশন সহজ করে এবং অবজেক্টগুলির জন্য scoping এবং lifecycle management সরবরাহ করে। এই প্রক্রিয়ায়, নির্দিষ্ট অবজেক্টগুলি injected বা ম্যানেজড হয়, যার মাধ্যমে এক্সপ্লিসিট কনফিগারেশন কমে এবং কোডে নমনীয়তা আসে।
MapStruct-এর সাথে CDI ইন্টিগ্রেশন করার মাধ্যমে আপনি MapStruct এর Mapper ক্লাসগুলিকে CDI কন্টেইনারের অংশ হিসেবে ব্যবহার করতে পারেন। সাধারণত MapStruct ব্যবহারকারীরা MapStruct এর Mapper Interface তৈরি করেন, যেগুলিকে Spring বা CDI কন্টেইনারের মাধ্যমে ইনজেক্ট করা যেতে পারে। componentModel = "cdi"
কনফিগারেশন ব্যবহার করে MapStruct এর মেপার ক্লাসগুলো CDI কন্টেইনারের Bean হিসেবে কাজ করে এবং তা ইনজেক্ট করা যায়।
MapStruct এর সাথে CDI ইন্টিগ্রেট করার জন্য আপনাকে Mapper Interface এ componentModel = "cdi"
ব্যবহার করতে হবে। এটি MapStruct কে CDI কন্টেইনারে স্বয়ংক্রিয়ভাবে যুক্ত করতে সাহায্য করে।
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@Mapper(componentModel = "cdi")
public interface EmployeeMapper {
@Mapping(source = "name", target = "fullName")
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, componentModel = "cdi"
দ্বারা EmployeeMapper কে CDI Bean হিসেবে ঘোষণা করা হয়েছে। এর মাধ্যমে আপনি EmployeeMapper ইনজেক্ট করতে পারবেন।
MapStruct Mapper ক্লাসটি CDI কন্টেইনারের Bean হিসেবে কাজ করার কারণে এটি সরাসরি @Inject দিয়ে ইনজেক্ট করা যেতে পারে।
import javax.inject.Inject;
public class EmployeeService {
@Inject
private EmployeeMapper employeeMapper;
public EmployeeDTO convertToDTO(Employee employee) {
return employeeMapper.employeeToEmployeeDTO(employee);
}
}
এখানে, @Inject
দিয়ে EmployeeMapper
কে CDI কন্টেইনার থেকে ইনজেক্ট করা হয়েছে। এটি Spring এর @Autowired এর মতোই কাজ করে।
componentModel = "cdi"
ঠিকভাবে কনফিগার করুন, যাতে এটি CDI কন্টেইনারে Bean হিসেবে কার্যকরী হয়।CDI (Contexts and Dependency Injection) একটি শক্তিশালী ফিচার যা Java EE এ ডিপেনডেন্সি ইনজেকশন এবং অবজেক্ট লাইফসাইকেল ম্যানেজমেন্টের কাজ সহজ করে তোলে। MapStruct এর সাথে CDI ইন্টিগ্রেট করে আপনি MapStruct ম্যাপার ক্লাসগুলোকে সহজে Spring বা CDI কন্টেইনারের Bean হিসেবে ব্যবহার করতে পারেন। এটি ডিপেনডেন্সি ইনজেকশন এবং ম্যাপিং কোড ব্যবস্থাপনা সহজ করে তোলে, এবং কোডের নমনীয়তা এবং মেইনটেন্যান্স বৃদ্ধি করে। CDI এবং MapStruct এর ইন্টিগ্রেশন উন্নত কোড ডিজাইন এবং টেস্টিং সক্ষম করে।
MapStruct একটি কোড জেনারেশন লাইব্রেরি যা Java ডোমেইন অবজেক্ট এবং DTO (Data Transfer Object) এর মধ্যে ম্যাপিং সরবরাহ করে। এটি compile-time এ কোড জেনারেট করে এবং কোড পারফরম্যান্সে উন্নতি আনে। CDI (Contexts and Dependency Injection) হল একটি Java EE ফিচার যা dependency injection এর মাধ্যমে অবজেক্ট এবং সেবা গুলি ইন্সট্যানশিয়েট এবং ম্যানেজ করতে সহায়তা করে। MapStruct এবং CDI একসাথে ব্যবহার করলে আপনি সহজেই MapStruct Mapper অবজেক্টগুলিকে CDI কনটেইনারে সংযুক্ত করে ম্যাপিং কাজটি করতে পারেন।
এই টিউটোরিয়ালে, আমরা দেখব কিভাবে CDI (Contexts and Dependency Injection) এর মাধ্যমে MapStruct ব্যবহার করা যায়।
MapStruct ব্যবহার করার সময়, আপনি যখন Spring বা CDI ফ্রেমওয়ার্ক ব্যবহার করেন, তখন MapStruct এর componentModel = "cdi" কনফিগারেশন ব্যবহার করে MapStruct কে CDI কনটেইনারে ইনজেক্ট করতে পারেন।
MapStruct কে CDI এর মাধ্যমে ব্যবহার করতে, আপনার Mapper Interface এ componentModel = "cdi"
অ্যাট্রিবিউট যুক্ত করতে হবে। এর মাধ্যমে MapStruct নিজে CDI কনটেইনারের মধ্যে Bean হিসেবে রেজিস্টার হয়ে যাবে এবং এটিকে স্বয়ংক্রিয়ভাবে @Inject এর মাধ্যমে ইন্সট্যানশিয়েট করা যাবে।
ধরা যাক আমাদের দুটি অবজেক্ট রয়েছে: Person এবং PersonDTO, এবং আমরা CDI এর মাধ্যমে MapStruct ম্যাপিং তৈরি করতে চাই।
public class Person {
private String name;
private int age;
// Getters and Setters
}
public class PersonDTO {
private String name;
private int age;
// Getters and Setters
}
এখানে, componentModel = "cdi" কনফিগারেশন সহ MapStruct Mapper Interface তৈরি করা হয়েছে। এটি CDI কনটেইনারে ইনজেক্ট হতে সক্ষম।
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);
}
এখানে, @Mapper(componentModel = "cdi") ব্যবহার করা হয়েছে, যা MapStruct কে CDI কনটেইনারের মধ্যে রেজিস্টার করতে সহায়তা করে।
এখন, আপনি এই Mapper ইন্টারফেসটি CDI কনটেইনারে ইনজেক্ট করতে পারবেন। নিচে একটি CDI Bean ব্যবহার করে PersonMapper ইনজেক্ট করা হয়েছে:
import javax.inject.Inject;
public class PersonService {
@Inject
private PersonMapper personMapper;
public PersonDTO convertPersonToDTO(Person person) {
return personMapper.personToPersonDTO(person);
}
}
এখানে, @Inject
অ্যানোটেশন ব্যবহার করা হয়েছে, যার মাধ্যমে CDI কনটেইনার স্বয়ংক্রিয়ভাবে PersonMapper কে ইনজেক্ট করবে এবং ম্যাপিং প্রক্রিয়া সম্পন্ন করবে।
CDI (Contexts and Dependency Injection) Java EE বা Jakarta EE এর একটি ফিচার, যা dependency injection (DI) এবং context management এর মাধ্যমে অবজেক্ট এবং সেবা ইনজেক্ট করে। CDI-র মাধ্যমে আপনি অবজেক্টের lifecycle এবং dependencies সহজে ম্যানেজ করতে পারেন, যা কোডের রিয়ুসেবিলিটি, টেস্টেবিলিটি এবং রিডেবিলিটি বৃদ্ধি করে।
MapStruct এবং CDI এর মাধ্যমে ম্যাপিং ব্যবহারের জন্য কিছু অতিরিক্ত ডিপেনডেন্সি আপনার pom.xml বা build.gradle ফাইলে যোগ করতে হবে।
<dependencies>
<!-- MapStruct Dependency -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.2.Final</version>
</dependency>
<!-- MapStruct Processor Dependency for compile-time code generation -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.2.Final</version>
<scope>provided</scope>
</dependency>
<!-- CDI Dependency (if not already included) -->
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
dependencies {
// MapStruct Dependency
implementation 'org.mapstruct:mapstruct:1.5.2.Final'
// MapStruct Processor for compile-time code generation
annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.2.Final'
// CDI Dependency
implementation 'javax.enterprise:cdi-api:2.0'
}
MapStruct এবং CDI একত্রে ব্যবহারের মাধ্যমে আপনি Java প্রোজেক্টে অটোমেটিক ম্যাপিং এবং ডিপেনডেন্সি ইনজেকশন সুবিধা পেতে পারেন। MapStruct এর componentModel = "cdi"
কনফিগারেশনের মাধ্যমে এটি CDI কনটেইনারে রেজিস্টার করা যায় এবং @Inject অ্যানোটেশন ব্যবহার করে আপনি CDI কনটেইনার থেকে MapStruct Mapper ইনজেক্ট করতে পারেন। এই ইন্টিগ্রেশনটি কোডে সহজ এবং কার্যকরী ম্যাপিং সল্যুশন প্রদান করে এবং কোড রিয়ুসেবিলিটি ও টেস্টেবিলিটি উন্নত করে।
MapStruct একটি কোড জেনারেটর যা Java Beans (POJOs) এবং ডেটা ট্রান্সফার অবজেক্ট (DTO) এর মধ্যে ম্যাপিং করে থাকে। MapStruct এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল componentModel
সেটিং, যা আপনাকে MapStruct Mapper এর সাথে বিভিন্ন ফ্রেমওয়ার্কে ইন্টিগ্রেট করার সুবিধা দেয়। এর মধ্যে একটি জনপ্রিয় ইন্টিগ্রেশন হল CDI (Contexts and Dependency Injection), যা Java EE বা Jakarta EE অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়।
@Mapper(componentModel = "cdi")
ব্যবহার করার মাধ্যমে, আপনি আপনার MapStruct Mapper ক্লাসটিকে CDI কম্পোনেন্ট হিসেবে ব্যবহার করতে পারবেন। এটি মূলত CDI কনটেইনারের মাধ্যমে MapStruct Mapper এর ইন্সট্যান্স তৈরি করে, যা injection এর মাধ্যমে অন্যান্য ক্লাসে ব্যবহার করা যায়।
CDI (Contexts and Dependency Injection) হল Java EE বা Jakarta EE এর একটি বৈশিষ্ট্য, যা ডিপেনডেন্সি ইনজেকশন (DI) সমর্থন করে। এটি অবজেক্ট ইনস্ট্যান্স এবং তাদের জীবনচক্রকে পরিচালনা করার একটি পদ্ধতি প্রদান করে। CDI ফিচারটি MapStruct এর সাথে ব্যবহার করলে, আপনি MapStruct Mapper ক্লাসগুলোকে CDI Bean হিসেবে ব্যবহার করতে পারবেন এবং এটি আপনার প্রোজেক্টে সহজে ইনজেক্ট করা যাবে।
@Mapper(componentModel = "cdi")
ব্যবহার কেন প্রয়োজন?CDI ব্যবহারের মাধ্যমে, আপনি MapStruct Mapper কে সহজেই CDI Context থেকে ইনস্ট্যান্স হিসেবে ইনজেক্ট করতে পারবেন, যেমন অন্যান্য Spring বা JEE Beans। এটি ব্যবহারের মাধ্যমে, আপনি আপনার Mapper ক্লাসগুলিকে আপনার প্রোজেক্টের অংশ হিসেবে ব্যবহার করতে পারেন যেখানে dependency injection ব্যবহৃত হয়, এবং MapStruct এর ফিচারগুলো Spring Bean বা JEE Beans হিসেবে পাওয়ার সুবিধা পাবেন।
@Mapper(componentModel = "cdi")
এর ব্যবহার@Mapper(componentModel = "cdi")
একটি অ্যানোটেশন যা MapStruct মাপার ক্লাসটিকে CDI কনটেইনারের সাথে সম্পর্কিত করে। যখন এই কনফিগারেশন ব্যবহার করা হয়, তখন MapStruct স্বয়ংক্রিয়ভাবে CDI কনটেইনারের মাধ্যমে ম্যাপার ক্লাসের একটি ইনস্ট্যান্স তৈরি করবে এবং আপনি এটি @Inject ব্যবহার করে যেকোনো ক্লাসে ইনজেক্ট করতে পারবেন।
@Mapper(componentModel = "cdi")
এর ব্যবহারধরা যাক, আমাদের দুটি ক্লাস Person
এবং PersonDTO
আছে, এবং আমরা MapStruct ব্যবহার করে এই দুই ক্লাসের মধ্যে ডেটা ট্রান্সফার করতে চাই।
Person.java:
public class Person {
private String name;
private int age;
// Getters and Setters
}
PersonDTO.java:
public class PersonDTO {
private String fullName;
private int age;
// Getters and Setters
}
এখন, MapStruct ব্যবহার করে আমরা Person কে PersonDTO তে ম্যাপ করতে চাই, এবং @Mapper(componentModel = "cdi") ব্যবহার করে এই Mapper কে CDI Bean হিসেবে কনফিগার করব।
PersonMapper.java:
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"
এর মাধ্যমে PersonMapper কে CDI Bean হিসেবে তৈরি করা হচ্ছে।
এখন, আপনি CDI কনটেইনার ব্যবহার করে PersonMapper ক্লাসটিকে যেকোনো ক্লাসে ইনজেক্ট করতে পারেন। এখানে @Inject ব্যবহার করা হবে।
PersonService.java:
import javax.inject.Inject;
public class PersonService {
@Inject
PersonMapper personMapper;
public PersonDTO convertToDTO(Person person) {
return personMapper.personToPersonDTO(person);
}
}
এখানে, @Inject অ্যানোটেশন ব্যবহার করে আমরা PersonMapper ক্লাসটিকে PersonService ক্লাসে ইনজেক্ট করেছি। CDI কনটেইনার স্বয়ংক্রিয়ভাবে PersonMapper এর একটি ইনস্ট্যান্স তৈরি করবে।
এমনকি MapStruct এর componentModel = "spring" এবং componentModel = "cdi" একই উদ্দেশ্যে ব্যবহৃত হয়, তবে তাদের ব্যবহারের প্রসঙ্গ ভিন্ন। Spring ব্যবহারের ক্ষেত্রে Spring কনটেইনারের মাধ্যমে ডিপেনডেন্সি ইনজেকশন করা হয়, যেখানে CDI হল Java EE বা Jakarta EE ফ্রেমওয়ার্কের অংশ এবং এর মাধ্যমে ডিপেনডেন্সি ইনজেকশন করা হয়।
MapStruct এর মাধ্যমে @Mapper(componentModel = "cdi")
ব্যবহারের মাধ্যমে আপনি আপনার Mapper ক্লাসগুলিকে CDI কনটেইনারের অংশ হিসেবে ইন্টিগ্রেট করতে পারেন। এটি dependency injection ব্যবহারে সাহায্য করে, এবং আপনাকে MapStruct Mapper ক্লাসগুলিকে সহজে CDI Bean হিসেবে ইনজেক্ট করতে দেয়। এটি Java EE বা Jakarta EE অ্যাপ্লিকেশনগুলিতে ব্যবহার করা হয়, যেখানে CDI কনটেইনারের মাধ্যমে ম্যানেজ করা হয়।
CDI (Contexts and Dependency Injection) একটি Java EE (Jakarta EE) স্পেসিফিকেশন যা ডিপেনডেন্সি ইনজেকশন এবং কনটেক্সট পরিচালনার জন্য ব্যবহৃত হয়। MapStruct এর সাথে CDI ইন্টিগ্রেশন সাধারণত Spring বা CDI Containers এর সাথে ব্যবহার করা হয়, যেখানে MapStruct Bean হিসেবে ব্যবহৃত হয় এবং CDI এর মাধ্যমে এটি স্বয়ংক্রিয়ভাবে ইনজেক্ট করা হয়।
এখানে, আমরা CDI Integration এর মাধ্যমে MapStruct এর উদাহরণ সহ ব্যবহারের পদ্ধতি দেখব।
MapStruct এর সাথে CDI ইন্টিগ্রেশন আপনাকে MapStruct এর Mapper Interface কে CDI Beans হিসেবে ব্যবহারের সুবিধা দেয়। এর মানে হল যে আপনি আপনার প্রোজেক্টে CDI Container এর মাধ্যমে মেথডগুলো ইনজেক্ট করতে পারবেন এবং বিভিন্ন Scope এর মধ্যে ম্যাপিং ফাংশনালিটি ব্যবহার করতে পারবেন।
MapStruct CDI Integration করার জন্য, MapStruct Mapper ইন্টারফেসে componentModel = "cdi"
যুক্ত করতে হয়, যা MapStruct কে CDI Bean হিসেবে কনফিগার করে। এর মাধ্যমে CDI Container এ MapStruct Mapper ইন্টারফেসটিকে স্বয়ংক্রিয়ভাবে ইনজেক্ট করা যাবে।
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 ব্যবহারের মাধ্যমে 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 প্রোজেক্টে MapStruct ব্যবহার করতে চাইলে, প্রথমে componentModel = "cdi"
ব্যবহার করে Mapper ইন্টারফেস কনফিগার করুন, তারপরে এটিকে CDI Bean হিসেবে ইনজেক্ট করুন। এই কনফিগারেশনটি EJB, CDI Managed Beans এবং JAX-RS বা Servlet এর মধ্যে ব্যবহৃত হতে পারে।
public class Person {
private String name;
private int age;
// Getters and Setters
}
public class PersonDTO {
private String fullName;
private int age;
// Getters and Setters
}
import org.mapstruct.Mapper;
@Mapper(componentModel = "cdi")
public interface PersonMapper {
PersonDTO personToPersonDTO(Person person);
}
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 এর মাধ্যমে ম্যাপিং করা হচ্ছে।
MapStruct এর সাথে CDI Integration কার্যকর করার জন্য আপনার CDI Container যেমন Weld, OpenWebBeans, বা GlassFish এ কনফিগার করতে হবে। প্রোজেক্টে CDI ইন্টিগ্রেশন করার জন্য আপনাকে সঠিক CDI Implementation যোগ করতে হবে।
<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 Integration ব্যবহার করে আপনি স্বয়ংক্রিয়ভাবে MapStruct Mapper ইন্টারফেসকে CDI Beans হিসেবে ইন্টিগ্রেট করতে পারেন, যা আপনার প্রোজেক্টে ডিপেনডেন্সি ইনজেকশন সহজ করে তোলে। এটি MapStruct এর ম্যাপিং ক্ষমতা এবং CDI এর ডিপেনডেন্সি ইনজেকশন ফিচার একত্রিত করে এবং আপনাকে আরও পরিষ্কার এবং উন্নত কনফিগারেশন প্রদান করে। এই ইন্টিগ্রেশন বিশেষভাবে Java EE বা Jakarta EE ভিত্তিক অ্যাপ্লিকেশন ডেভেলপমেন্টে উপকারী।
Read more