Wie von Brettanomyces kommentiert, wird der Dienst nicht injiziert, wenn er nicht in anderen Zuordnungsoperationen als Ausdrücken verwendet wird.
Die einzige Art, wie ich zu dieser gefunden ist:
- Trans meine Mapper-Schnittstelle in einer abstrakten Klasse
- den Dienst in der abstrakten Klasse Injizieren
- es so die „Umsetzung“ geschützt Stellen der abstrakte Klasse hat Zugriff
ich bin mit CDI, aber es sollte die samel mit Frühling sein:
@Mapper(
unmappedTargetPolicy = org.mapstruct.ReportingPolicy.IGNORE,
componentModel = "spring",
uses = {
// My other mappers...
})
public abstract class MyMapper {
@Autowired
protected MyService myService;
@Mappings({
@Mapping(target="x", expression="java(myservice.findById(obj.getId()))")")
})
public abstract Dto myMappingMethod(obj);
}
Ich habe das gleiche Problem und es scheint, dass die Klassen, die mit 'uses' deklariert sind, nur autowired werden, wenn eine ihrer Methoden als source-> target mapping verwendet wird. Wenn sie nur in einem Ausdruck verwendet werden * not * get autowired –
Ah, das ist ein interessanter Punkt, wenn Sie * nur * es in einem Ausdruck verwenden wollen. Könnten Sie ein Problem in [unserem Tracker] (https://github.com/mapstruct/mapstruct/issues) öffnen? Vielen Dank! – Gunnar