Java 使用Guice注入具有不同参数的相同组件

Java 使用Guice注入具有不同参数的相同组件,java,dependency-injection,guice,Java,Dependency Injection,Guice,我有一个表示图形组件的类。此组件显示数据库中的数据 现在我有了某种仪表板,上面有12个组件。当然我想重用这个组件!所以我想,我可以使用带有参数的自定义注释,并将参数传递给提供者。我在Stackoverflow上发现了一些黑客(http://stackoverflow.com/questions/5704918/custom-guice-binding-annot...)但老实说,我没有找到任何文档来说明如何为我的自定义接口实现AnnotationImpl 我不认为AssistedInject是我

我有一个表示图形组件的类。此组件显示数据库中的数据

现在我有了某种仪表板,上面有12个组件。当然我想重用这个组件!所以我想,我可以使用带有参数的自定义注释,并将参数传递给提供者。我在Stackoverflow上发现了一些黑客(http://stackoverflow.com/questions/5704918/custom-guice-binding-annot...)但老实说,我没有找到任何文档来说明如何为我的自定义接口实现AnnotationImpl

我不认为AssistedInject是我在这里需要的,因为我不喜欢通过AssistedInjection将同一个类的12倍注入我的构造函数

对于我来说,一个不可行的方法就是为一个不同的参数编写一个接口和12个实现类


有人对我的问题有什么想法吗?

我不太清楚你想做什么,但我认为辅助注射可能适合你。您不能创建ComponentFactory,然后在其创建方法中指定所需的参数吗?您甚至不需要创建工厂的具体实现,因为Guice会为您这样做,您可以这样指定:

install(new FactoryModuleBuilder().build(ComponentFactory.class));
public interface ComponentFactory {
    Component create(ParameterType parameter);
}
public class Component {
    @Inject
    public WebClient(@Assisted ParameterType parameter, OtherService service) {
        // etc...
    }
}
ComponentFactory将如下所示:

install(new FactoryModuleBuilder().build(ComponentFactory.class));
public interface ComponentFactory {
    Component create(ParameterType parameter);
}
public class Component {
    @Inject
    public WebClient(@Assisted ParameterType parameter, OtherService service) {
        // etc...
    }
}
组件本身是这样的:

install(new FactoryModuleBuilder().build(ComponentFactory.class));
public interface ComponentFactory {
    Component create(ParameterType parameter);
}
public class Component {
    @Inject
    public WebClient(@Assisted ParameterType parameter, OtherService service) {
        // etc...
    }
}

然后您将ComponentFactory传递到仪表板,它可以(轻松地)创建它想要的任何组件。

您完全正确。我在你发帖后考虑过,这是一个明确的辅助注射方案。谢谢你给我指出了正确的方向。关于绑定符号的一个建议是:可以使用
install(new-FactoryModuleBuilder().build(MyFactory.class))绑定工厂