gpt4 book ai didi

Java 配置和依赖注入(inject)(类似于 Springs IoC 与 Weld/Guice)

转载 作者:行者123 更新时间:2023-12-03 23:27:44 24 4
gpt4 key购买 nike

假设我有一个要配置的类 ListCreator。我希望能够告诉它排序顺序以及如何输出我的表。因此,我有 boolean sortDescending 属性和 TableWriter 接口(interface),它由 PdfTableWriter 实现(但也由 XlsTableWriter 实现) .在这个例子中,我认为配置和 DI 是齐头并进的。我想写一些类似这个 Spring(伪)示例的东西:

<beans>
<bean id="ListCreator" class="ModularListCreator">
<property name="tableWriter">
<ref local="TableWriter"/>
</property>
<property name="sortDescending">
<value>true</value>
</property>
</bean>
<bean id="TableWriter" class="PdfTableWriter"> </bean>
</beans>

现在 Spring 可以做到这一点,但 Weld & Guice 似乎做不到。例如,Weld 允许您在 beans.xml 中选择备选方案,但仅限于整个应用程序。如果我想同时拥有一个用于 PDF 的 ListCreator 和另一个用于 XLS 怎么办?

目前我不了解 Weld 和 Guice 的范围,因为它们似乎不允许进行太多配置。这似乎只是减轻了编写 new 或实现您自己的工厂的需要。例如,EJB 注入(inject)做同样的事情,这很好,但是整个配置部分在哪里(选择哪个实例和我真正想要的参数)。

说到重点:我不想使用 Spring,因为它看起来开销很大。我宁愿使用由 JSR 指定的最好的干净和小的东西。有什么建议吗?

最佳答案

Guice 实际上为您提供了很多配置功能。假设我对您的理解是正确的,这里有一个简单的示例,说明您可以在 Guice 中使用模块中的提供程序方法来执行此操作。

protected void configure() {
bind(TableWriter.class).to(PdfTableWriter.class);
}

@Provides
protected ListCreator provideListCreator(TableWriter tableWriter) {
ModularListCreator result = new ModularListCreator();
result.setTableWriter(tableWriter);
result.setSortDescending(true);
return result;
}

还有其他方法,包括让 setSortDescending 使用绑定(bind)注解:

@Inject public void setSortDescending(
@Named("sortDescending") boolean sortDescending)

然后绑定(bind)该属性:

protected void configure() {
bind(TableWriter.class).to(PdfTableWriter.class);
bindConstant().annotatedWith(Names.named("sortDescending")).to(true);
bind(ListCreator.class).to(ModularListCreator.class);
}

关于Java 配置和依赖注入(inject)(类似于 Springs IoC 与 Weld/Guice),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6863317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com