-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Closed
Labels
enhancementgood first issueup-for-grabsIssues targeted for community contributionIssues targeted for community contribution
Milestone
Description
Use case
It is possible that there is a dependency cycle between multiple mappers, e.g.:
@Mapper(componentModel = "spring", uses = { FooMapper.class })
public interface BarMapper {
Bar toBo(BarDto dto);
BarDto toDto(Bar obj) ;
}
@Mapper(componentModel = "spring", uses = { BarMapper.class })
public interface ForMapper {
Foo toBo(FooDto dto);
FooDto toDto(Foo obj) ;
}In that case newer versions of SpringBoot will fail at build time. This has been reported in #2741. #2741 (comment) noted the preferred workaround, i.e., use SETTER injection instead of FIELD or CONSTRUCTOR.
Therefore, we should implement an additional InjectionStrategy.SETTER to work around issues like this.
Generated Code
@Mapper(componentModel = "spring", uses = { FooMapper.class }, injectionStrategy = InjectionStrategy.SETTER)
public interface BarMapper {
Bar toBo(BarDto dto);
BarDto toDto(Bar obj) ;
}@Generated(...)
@Component
public class FooMapperImpl implements FooMapper {
private BarMapper barMapper;
...
public void setBarMapper(BarMapper barMapper) {
this.barMapper = barMapper;
}
}Possible workarounds
A work around is to use an external dependency described in the referenced issue: #2741 (comment)
MapStruct Version
MapStruct 1.5.3.Final
Metadata
Metadata
Assignees
Labels
enhancementgood first issueup-for-grabsIssues targeted for community contributionIssues targeted for community contribution