泽西岛2. *& HK2。基于路径参数注入不同的对象(例如DAO)

时间:2013-10-08 17:52:28

标签: java dependency-injection jersey hk2

我正在实施一个多租户应用程序。我的许多资源都有“/ 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的资源。

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

1 个答案:

答案 0 :(得分:1)

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

看看这个网址,这就是我为了让依赖注入与需要特定dao的资源一起工作而做的。

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