我正在实施一个多租户应用程序。我的许多资源都有“/ api / tenant / {tenant_id} / resource / path /”之类的路径。我想做的是根据“{tenant_id}”路径参数向资源注入不同的DAO(或可能是其他对象)。
关于如何实现类似的东西,我有两个次优的想法:
使用这样的包装类:
class SomeDAOWrapper
{
SomeDAO getSomeDAO()
{
return new SomeDAO(tenantId_m);
// Alternatively we could store the DAOs in some hash-table
// with tenantId_m as the key.
}
@PathParam("tenant_id")
private long tenantId_m;
}
然后在我的资源类中,我将SomeDAOWrapper
作为使用@BeanParam
注释的属性。
在路径“/ api / tenant / {tenant_id}”上使用子资源定位器,它将返回具有正确DAO的资源。
还有其他想法吗?理想情况下,我想要做的是在我的资源类中简单地使用SomeDAO
属性注释@Inject
或类似的东西(并且会使用一些带有tenant_id
路径参数的工厂考虑到了。)
答案 0 :(得分:1)
我遇到了同样的问题,最终使用了guice multibinder解决方案。您基本上将您的Dao绑定到MultiBinder,然后将工厂注入您的服务。这是我能解决问题的最干净的解决方案。
看看这个网址,这就是我为了让依赖注入与需要特定dao的资源一起工作而做的。
https://groups.google.com/forum/#!topic/google-guice/J6S77sILTAY