微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Spring bean 与 Mapstruct 的静态实例模式

如何解决使用 Spring bean 与 Mapstruct 的静态实例模式

我知道您可以使用注解 @Mapper(componentModel = “spring”) 来使用 Spring 来管理/注入映射器依赖项。我的问题是,与在映射器类本身中声明实例变量相比,这种方法有什么优势:

@Mapper
public interface SomeMapper {
    SomeMapper INSTANCE = Mappers.getMapper(SomeMapper.class);

    SomethingElse mapSomethingToSomethingElse(Something something);
}

...

// Clients using mapper
SomethingElse result = SomeMapper.INSTANCE.mapSomethingToSomethingElse(input);

解决方法

当使用 Spring 依赖注入来注入映射器时,您最终会添加额外的构造函数参数/实例字段,这是可取的,因为它使类开始依赖太多依赖项并且很可能应该重构的情况变得更加明显(例如,想想声纳的规则 cty type system)。

另一个优点是,由于您在 Spring 上下文中将映射器注册为 bean,因此您可以利用框架功能轻松地在映射器中注入依赖项,在运行时通过 'Too many parameters' 自定义所有映射器并依赖所有其他看起来合适的框架抽象。

我想说的是,由于您已经在应用程序中使用 Spring,因此几乎没有理由不将映射器注册为 Spring bean 并以 DI 方式注入它们,而不是将它们转换为静态工具。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。