0

我正在实现一个多租户应用程序。我的许多资源都有类似“/api/tenant/{tenant_id}/resource/path/”的路径。我想做的是根据“{tenant_id}”路径参数向资源注入不同的 DAO(或可能的其他对象)。

关于如何实现类似的目标,我有两个次优的想法:

  1. 使用这样的包装类:

    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.

  2. 在路径“/api/tenant/{tenant_id}”上使用子资源定位器,它将返回具有正确 DAO 的资源。

还有其他想法吗?理想情况下,我想做的是SomeDAO在我的资源类中简单地使用带有@Inject或类似注释的属性(并且将使用一些考虑tenant_id路径参数的工厂)。

4

1 回答 1

1

我遇到了同样的问题,最终使用了 guice multibinder 解决方案。您基本上将您的 Dao 绑定到 MultiBinder,然后将工厂注入到您的服务中。这是我能想出的最干净的解决方案。

看看这个 url,这几乎是我所做的让依赖注入与需要特定 dao 的资源一起工作。

https://groups.google.com/forum/#!topic/google-guice/J6S77sILTAY

于 2013-10-08T18:31:25.750 回答