我不知道您有多少 Talend 对象,但您可能需要考虑使用提供程序。例如,假设您有自己的类,希望 Guice 管理以下内容的创建:
public interface INotTalendControlled {}
public class NotTalendControlled implements INotTalendControlled {}
这将被添加到无法通过 Guice 注入其依赖项的 Talend 对象中(尽管我假设有一些手动过程来执行此操作,无论是构造函数还是设置器):
public class TalendControlled {
private INotTalendControlled notTalendControlled;
private TalendControlled(INotTalendControlled notTalendControlled) {
this.notTalendControlled = notTalendControlled;
}
public INotTalendControlled getValue() {
return notTalendControlled;
}
}
如果您希望 Guice 管理这些生命周期和 Talend 控制对象的生命周期,您可以使用如下提供程序:
public static class TestModule extends AbstractModule {
@Override
protected void configure() {
bind(INotTalendControlled.class).to(NotTalendControlled.class);
}
@Provides
public TalendControlled provideInjectsToTalendObject(INotTalendControlled notTalendControlled) {
return new TalendControlled(notTalendControlled);
}
}
@Provides 方法将对所有对象隐藏 new 的使用,因为您现在可以直接注入 TalendControlled 对象 (@Inject TalenControlled talendControlled),并且不需要显式注入器来构造它们的依赖项。