【发布时间】:2021-02-02 17:20:08
【问题描述】:
我有兴趣使用 HK2 或 Guice 作为依赖注入框架。
我知道@Named、@Qualifier 和自定义注释等。但这些都是编译时的。
我正在寻找一种工具来根据运行时上下文动态确定所需的具体类型并注入正确的实现。
在 HK2 或 Guice 中是否有类似的东西或实现此目标的推荐方式?
例如:
// I would want to turn this...
public final class Handler
{
private final Session session;
@Inject
public Handler(@Named("Database") final Session session)
{
this.session = session;
}
...
}
// into something like this...
public final class Handler
{
private final Session session;
@Inject
public Handler(final Session session)
{
this.session = session;
}
}
// where "session" is injected based on some previous context value ("Database")
// or something to that effect.
【问题讨论】:
-
HK2中有
Factorys的概念,这可以让你在运行时判断注入的对象。我与 Guice 的合作不多,但我认为他们的 FactoryProvider 是类似的。 -
嗨@PaulSamsotha,HK2 工厂看起来很接近我想要的。我不确定如何将运行时信息传递给工厂,以便它可以决定正确的实现,或者也许如何将运行时信息传递给注入器以注入正确的工厂。
-
您在寻找什么信息?
-
几乎任何你可以注入资源类的东西,你也可以注入工厂。您还可以注入 ContainerRequest。这将为您提供有关请求所需的几乎所有信息。
-
如果你确实使用了工厂,你也可以注入一个可以在提供方法中使用的 InstantiationService 来发现谁实际上正在尝试注入服务。见javaee.github.io/hk2/apidocs/org/glassfish/hk2/api/…
标签: java dependency-injection cdi guice hk2