2013-10-08 2 views
0

Я реализую приложение с несколькими арендаторами. Многие из моих ресурсов имеют такие пути, как «/ api/tenant/{tenant_id}/resource/path /». То, что я хотел бы сделать, - это добавить в ресурс разные DAO (или, возможно, другие объекты) на основе параметра пути {{tenant_id}.Jersey 2. * & HK2. Внедрить другой объект (например, 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).

ответ

1

Я столкнулся с такой же проблемой и в конечном итоге использовал решение с множеством точек. Вы по существу привязываете свои Dao к MultiBinder, а затем вводите завод в свою службу. Это было самое чистое решение, которое я мог бы решить для проблемы.

Проверьте этот URL, это в значительной степени то, что я сделал, чтобы получить инъекцию зависимостей, работая с ресурсом, который нуждался в конкретном дао.

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

+0

Это похоже на жизнеспособный подход, спасибо. – TheCuriousOne

Смежные вопросы