我有一个usecase,我正在使用一个基于Spring的外部jar,而我的代码在Google上。
我试图通过编写模块将依赖项注入到依赖jar的这个类中。
外部类:
public class PTRS {
@Inject
private Event countEvent;
@Inject
private Event durationEvent;
private GeoServiceClient gClient;
public void setGeoServiceClient(GeoServiceClient client){this.gClient=client}
}我能够在我的模块中设置带有setter的成员,但是@inject成员是空的,我正在为countEvent和durationEvent获得一个countEvent。
我的代码使用以下提供程序类创建一个对象,以便与PTRS类绑定。
@Provides
PTRS new PTRS(Client client){
PTRS ptrs = new PTRS();
ptrs.setGeoServiceClient(client);
return ptrs;
}如何在不更改外部类的情况下注入这两个依赖项?
发布于 2017-11-12 21:14:23
在Guice不创建的对象上注入一个MembersInjector来填充@Inject-annotated字段(并调用@Inject-annotated方法)。Guice在wiki中称这个词为“按需注射”,尽管我还没有在其他地方听说过这个词。
@Provides
PTRS newPTRS(Client client, MembersInjector<PTRS> ptrsInjector){
PTRS ptrs = new PTRS();
ptrsInjector.injectMembers(ptrs); // <-- inject members here
ptrs.setGeoServiceClient(client);
return ptrs;
}如果您可以访问Injector (它本身是可注入的),则可以直接调用injectMembers(Class),或者调用getMembersInjector来获取您选择的类型的MembersInjector实例。然而,这里的最佳实践是尽可能地插入一个窄的接口,以便清晰地阅读和易于嘲弄。
https://stackoverflow.com/questions/47253540
复制相似问题