我有一个类,每个请求(在我的示例中为dbSession)和其他一些使用每个请求对象的实例的类应该为其创建(和销毁)实例。像这样:
webservice --> repository --> dao --> dbSession
( - >表示使用)
但是我有一个类似的用例,但dbsession不应该绑定到请求。像这样:
webservice --> otherService --> repository --> dao --> dbSession
目前dbSession类已绑定到请求。要实现其他用例,db会话不能是请求绑定。我可以使用限定符来执行此操作,但之后我必须为两个范围复制一堆(必需的)提供程序方法。
所以,我正在寻找另一种解决方案。是否可以传播范围?我的意思是依赖关系注入注入目标范围的对象?
@request webservice --> @myScope otherService --> @myScope repository --> @myScope dao --> @myScope dbSession
在示例中,otherService的所有依赖项应与otherService在同一范围内(对otherService的调用是异步的)。
Guice可以这样吗?只是出于好奇:CDI会有可能吗?
答案 0 :(得分:0)
我理解正确吗?
第一种情况:
@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
我建议您将存储库封装到PrivateModule
和expose
仅repository
和otherService
接口。然后绑定在两个模块dbSession
(这意味着EntityManager
?)?提供者在不同的范围内。当你开始混合范围时,不要忘记使用Provider<T>
而不是直接注入。
第二个选项是使用dbSession / EntityManager提供程序绑定的注释并使用适当的注释注入它。