我使用球衣和Guice DI,我想使用Mapstruct接口 和@Inject
注释。 那么是否有某种方法可以强制Guice自动对Mapstruct接口实现进行自动装配?我如何结合Guice和Mapstruct?
0
A
回答
1
您可以使用@Mapper(componentModel = "jsr330")
配置要用JSR 330注释注释的映射器的实现。您可以在reference documentation
中找到更多信息。
然后,您可以将Mapper接口与模块中的实现类绑定。
一来约束他们的方法是使用吉斯Linked Bindings:
bind(MyDtoMapper.class).to(MyDtoMapperImpl.class)
约束他们的另一种方法是使用Instance Bindings:
bind(MyDtoMapper.class).toInstance(MyDtoMapper.INSTANCE)
0
跑进问题与使用吉斯和jsr330 componentModel,尽管我不记得他们究竟是什么。我的用例有点复杂,因为我需要将另一个服务传递给映射器装饰器。应该适合你的简单情况。在吉斯模块落得这样做供应商的方法,就像这样:
public YourModule extends AbstractModule {
//With Decorator
@Provides
@Singleton
FooMapper providesFooMapper(RequiredService requiredSvc) {
FooMapper mapper = Mappers.getMapper(FooMapper.class);
((FooMapperDecorator) mapper).setRequiredService(requiredSvc);
return mapper;
}
//Simple Mapper with no dependencies
@Provides
@Singleton
BarMapper providesBarMapper() {
return Mappers.getMapper(BarMapper.class);
}
}
工程顺利,不过我想很简单的情况下通过MapStruct干净一些点来处理。我还会注意到,我只使用构造函数注入;对于二传手注射应该是一样的,但是YMMV。
+0
在MapStruct中支持构造函数和/或字段注入已经有一个公开的问题,如果你有问题,请按照[https://github.com/mapstruct/mapstruct/issues/571]的问题。想跟踪状态 – Filip
0
相关问题
- 1. 整合Guice和OSGi服务
- 2. 的Java MapStruct集合映射
- 3. iOS AppExtension:我如何结合NSExtensionActivationRule和NSPredicate
- 4. 我如何结合和条件?
- 5. 如何将Guice 2整合到Wicket中?
- 6. Mapstruct抽象和通配符
- 7. 如何结合DataTrigger和EventTrigger?
- 8. 如何结合Find()和AsNoTracking()?
- 9. 如何结合EF和ADO?
- 10. 如何结合Recyclerview和Fragment?
- 11. 如何结合document.write()和window.open()
- 12. 如何结合Date_format和Date_sub
- 13. 如何结合PolicyInjection.Create和UnityContainer.RegisterType?
- 14. 如何结合mgwt和mvp4g?
- 15. 如何结合AC_SUBST和AC_DEFINE?
- 16. 如何结合InputStreamReader和StringBuffer?
- 17. 如何结合callLater和addCallback?
- 18. 如何结合LINQ和Lambda?
- 19. 如何结合sherlock和viewpageindicator?
- 20. 如何“结合”JButton和JComboBox?
- 21. 如何结合int`和`NSInteger`
- 22. Android和Guice - 如何传递参数?
- 23. 如何使用Guice Servlet和Wicket
- 24. Google Guice和Servlets
- 25. 我如何获得Guice和TestNg一起玩,a-la-AtUnit风格
- 26. Jersey Guice整合异常
- 27. 用Guice注入复合物
- 28. Mapstruct - 在响应
- 29. 如何结合
- 30. 如何结合
感谢@filip快速响应! 'componentModel =“jsr330”'真的很方便的事情。它将'@ javax.inject.Named'和'@ javax.inject.Singleton'添加到映射器实现中,但是当我尝试使用setter注入它时,就像这样@Inject void setBeanMapper(@Named BeanMapper beanMapper){ this .beanMapper = beanMapper; }' 它试图找到用'@ com.google.inject.name.Named(value =)'注解的BeanMapper的实现,它失败=( 你有任何想法如何解决这个问题? –
我没有很多guice的经验,也许我们需要为guice添加一个设置的例子,你在setter中使用了哪个'@Inject'和'@ Named'?也许guice不能用于混合注释,也许他们需要来自javax.inject' – Filip