java 通过mapstruct在另一个自定义Map器中使用自定义Map器(默认方法)

yhxst69z  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(229)

我想在MapperA的默认方法中使用MapperB
与此问题类似:How can I use another mapping from different class in mapstruct
然而,这个问题并没有要求"自定义Map器",即作为自己的接口存在的Map器。
我怎么可能做到呢?
我有一个MapperA接口和一个MapperB接口
如何在MapperA中使用MapperB?
像这样:

@Mapper
public interface MapperA {

    @Autowired
    MapperB mapperB; 

    default ArrayList<AudioDto> audiosToDto(List<Audio> audios, ApplicationUser loggedInUser) {
    Stream<AudioDto> audiosStream = audios.stream().map((Audio audio) -> mapperB.audioToAudioDto(audio, loggedInUser));
    return audiosStream.collect(Collectors.toCollection(ArrayList::new));
}

上面的代码不起作用,现在我尝试添加@Component(到MapperA和MapperB)来自动连接它,但它仍然给我:
@Autowired〈-不建议进行场注入
Map器B;变量'audioMapper'可能尚未初始化
即使是在Maven清理项目以去除MapperAImpl之后。

b1payxdu

b1payxdu1#

应该将MapperA定义为抽象类而不是接口,并使用setter注入来注入MapperB,如下所示:

@Mapper(componentModel="spring")
public abstract class MapperA {

    private MapperB mapperB; 

    @Autowired
    public final void setMapperB(MapperB mapperB) {
        this.mapperB = mapperB;
    }

    public ArrayList<AudioDto> audiosToDto(List<Audio> audios, ApplicationUser loggedInUser) {
        Stream<AudioDto> audiosStream = audios.stream().map((Audio audio) -> mapperB.audioToAudioDto(audio, loggedInUser));
        return audiosStream.collect(Collectors.toCollection(ArrayList::new));
    }
}

相关问题