gpt4 book ai didi

java - 使用 Guice 进行范围传播

转载 作者:行者123 更新时间:2023-12-02 10:46:42 24 4
gpt4 key购买 nike

我有一个类,应根据每个请求创建(和销毁)实例(在我的示例中为 dbSession),还有一些其他使用每个请求对象的实例的类。像这样:

webservice --> repository --> dao --> dbSession

(--> 表示使用)

但是我有一个类似的用例,但 dbsession 不应该绑定(bind)到请求。像这样:

webservice --> otherService --> repository --> dao --> dbSession

此时 dbSession 类已绑定(bind)到请求。要实现其他用例,数据库 session 不得受请求绑定(bind)。我可以使用限定符来做到这一点,但随后我必须为两个范围复制一堆(所需的)提供程序方法。

所以,我正在寻找另一种解决方案。是否可以传播范围?我的意思是依赖项被注入(inject)了注入(inject)目标范围内的对象?

@request webservice --> @myScope otherService --> @myScope repository --> @myScope dao --> @myScope dbSession

在示例中,otherService 的所有依赖项都应与 otherService 位于同一范围内(对 otherService 的调用是异步的)。

Guice 可以实现这样的功能吗?只是出于好奇:CDI 是否可行?

最佳答案

我的理解正确吗?

第一种情况:

@Request webservice --> @Singleton repository --> @Singleton dao --> @Request dbSession

您在第二种情况下要寻找的内容:

@request webservice --> @myScope/@Singleton otherService --> @myScope/@Singleton repository --> @myScope/@Singleton dao --> @myScope/@noscope_session_per_query dbSession

我建议您将存储库封装到 PrivateModuleexposerepositoryotherService界面。然后在两个模块中绑定(bind)dbSession (这意味着 EntityManager 应该是?)不同范围内的提供商。不要忘记使用Provider<T>当您开始混合作用域时,而不是直接注入(inject)。

第二个选项是对 dbSession/EntityManager 提供程序绑定(bind)使用注释,并使用适当的注释注入(inject)它。

关于java - 使用 Guice 进行范围传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30082631/

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