【问题标题】:Scope propagation with Guice使用 Guice 进行范围传播
【发布时间】:2015-07-16 22:30:26
【问题描述】:

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

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

(--> 表示使用)

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

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

目前 dbSession 类绑定到一个请求。要实现其他用例,数据库会话不能被请求绑定。我可以使用限定符来做到这一点,但是我必须为两个范围复制一堆(需要的)提供程序方法。

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

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

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

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

【问题讨论】:

标签: java dependency-injection scope cdi guice


【解决方案1】:

我理解正确吗?

第一种情况:

@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 接口。然后在两个模块中绑定dbSession(这意味着应该是EntityManager?)提供者在不同的范围内。开始混合作用域时不要忘记使用Provider<T> 而不是直接注入。

第二个选项是为 dbSession/EntityManager 提供者绑定使用注解并注入适当的注解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-09
    • 2011-10-07
    • 1970-01-01
    • 2020-07-01
    • 2013-01-07
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多