मानचित्रकार इंटरफ़ेस में जावा निर्भरता को कैसे इंजेक्ट करें - जावा

Nov 10 2020

मेरी वस्तुएं

 Public void Student(){
     private string name;
     private int age;
 }

Public void ClassRoom(){
   private string roomNo;
   private Student student; //Student Object
}

Public void School(){
   private string roomNo;
   private String student; //String student
}

मेरा एक इंटरफ़ेस है

@Mapper(componentModel = "jsr330", unmappedTargetPolicy = ReportingPolicy.IGNORE, builder = @Builder(disableBuilder = true))
public interface TestjkMapper {

    @Named("convertObjToString")
    static String convertObjToString(Student student) {
        return new Gson.tojson(student)
    }

   @Mapping(source = "student", target = "student",qualifiedByName = "convertObjToString")
   School mapClassRoomToSchool(@NonNull ClassRoom classRoom);

}

मैं नए Gson () के बजाय उस gson को इंजेक्ट करने की योजना बना रहा हूँ

इस के अनुसार मैं कैसे Guice और Mapstruct गठबंधन कर सकता हूं?

मैंने बदलाव करने की कोशिश की लेकिन यह सुनिश्चित नहीं किया कि उसे कहां जोड़ा जाए

@Inject
Gson gson

मैंने इस तरह की कोशिश की

public interface TestjkMapper {

  @Inject
  Gson gson

    @Named("authorityToMap")
    static Map authorityToMap(Authority authority) {
        return gson.tojson(authority.tostring())
    }

}

मुझे नीचे संकलक त्रुटि मिल रही है

variable gson might not have been initialized

उस इंटरफ़ेस के अंदर सही तरीके से इंजेक्ट कैसे करें

यहाँ भी

bind(TestjkMapper.class).to(TestjkMapperImpl.class)

TestjkMapper - मेरा इंटरफ़ेस

TestjkMapperImpl - यह रनटाइम पर उत्पन्न होता है। तो निश्चित नहीं कि यह कैसे बांधें

सटीक प्रश्न:

कैसे इंजेक्शन का उपयोग करके छात्र objectको छात्र में परिवर्तित करेंStringgson

जवाब

Filip Nov 11 2020 at 18:27

यदि आप अपने मैपर में कस्टम इंजेक्टेड घटकों का उपयोग करना चाहते हैं, तो आपको इंटरफेस के बजाय अमूर्त कक्षाओं का उपयोग करना होगा। आप फ़ील्ड को इंटरफ़ेस में इंजेक्ट नहीं कर सकते हैं।

आपके उदाहरण में ऐसा दिखेगा:

@Mapper(componentModel = "jsr330", unmappedTargetPolicy = ReportingPolicy.IGNORE, builder = @Builder(disableBuilder = true))
public abstract class TestjkMapper {

    @Inject
    Gson gson;

    @Named("convertObjToString")
    static String convertObjToString(Student student) {
        return gson.tojson(student)
    }

   @Mapping(source = "student", target = "student", qualifiedByName = "convertObjToString")
   School mapClassRoomToSchool(@NonNull ClassRoom classRoom);

}