gpt4 book ai didi

java - Guice 中的可选 Scoped 注入(inject)

转载 作者:搜寻专家 更新时间:2023-11-01 03:13:39 25 4
gpt4 key购买 nike

只有在当前范围内可用时,我才需要注入(inject)一个字段,否则为 null。例如:

public class Thinger implements Provider<SomeSuch> {
public @Inject(optional=true) HttpServletRequest request;

public SomeSuch get() {
return request == null ? new WhosIt() : WhatsIt();
}
}

但是,如果 HttpServletRequest 已绑定(bind)(确实如此)但不在范围内,我将收到 ProvisioningException。我已经能够找到一种优雅的方式来做到这一点,所以我只能做类似的事情。

HttpServletRequest request = null;
try {
request = injector.getInstance(HttpServletRequest.class);
} catch(ProvisioningException e) {}

这只是感觉各种错误。有没有正确的方法来做到这一点?

最佳答案

究竟是什么决定了您的类(class)是否可用? HttpServletRequest 对我来说有点违反直觉,因为在非请求范围的服务中没有请求对我来说听起来像是一个错误。

一个想法(通常)是为持有者编写一个自定义提供者,只使用一个获取/设置方法。在提供程序中,您可以运行检查,无论您的事物在当前范围内是否可用,它总是返回您需要的类型的 Holder,但它可能为空/空,具体取决于可用的事物。由于您总是返回一个 Holder,因此 Injector 应该没问题。您只需检查要将其注入(inject)的组件中是否为 null。

希望这对您有所帮助。

关于java - Guice 中的可选 Scoped 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4664630/

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