java如何在guice提供程序中使用guice注入器?
我正在使用guice注入依赖项
我有一个供应商:
public class RequestUrlRepository implements Provider<IRequestUrlRepository> {
@Singleton
@Override
public IRequestUrlRepository get() {
IRequestUrlRepository answer = null;
if (System.getProperty("").equals(RouteOrCostRequest.cost.toString())){
answer = new CostRequestUrlRepository(...);
}
else
{
answer = new RoutingRequestUrlRepository(...);
}
return answer;
}
}
当guice注入器位于提供程序中时,如何使用它来填充new CostRequestUrlRepository(...);
和new RoutingRequestUrlRepository(...)
如果不可能,我如何在不手动创建所有ctor参数的情况下初始化它们
# 1 楼答案
提供程序可以接受
@Inject
注释的构造函数和字段,Guice的内置绑定将允许您为注入器可以提供的任何键注入Injector
和提供程序(例如Provider<CostRequestUrlRepository>
)注意
@Singleton
注释在类上,而不是在方法上;根据Guice邮件列表,“范围注释作为一个整体应用于提供程序,用@Singleton注释get()方法是错误的,并且被忽略。”(link)理想情况下,您应该注入每个提供者,而不是注入整个注入器;这将使您更容易查看系统的依赖关系,然后您将更少地依赖于Guice,而更多地依赖于一般的JSR330注释。但是,如果必须基于变量中的名称或类文本实例化任意类,则注入注入器是一种方法