Guice инъекция и RequestFactory: расширение ServiceLayerDecorator - PullRequest
3 голосов
/ 24 сентября 2011

Я искал решение для использования инъекции зависимостей Guice вместе с RequestFactory. Я наткнулся на это: https://github.com/etiennep

Это не сработало для меня, поэтому я изменил реализацию InjectedServiceLayerDecorator.java следующим образом:

https://github.com/opncow/injected-requestfactory/blob/master/src/main/java/com/trycatchsoft/gwt/requestfactory/InjectedServiceLayerDecorator.java

Теперь мои вопросы:

Можно ли что-то сделать лучше с механизмом кэширования RequestFactory (он все еще работает?)? Для чего нужны getTop() и getNext() (в ServiceLayerDecorator)? И правильно ли / безопасно ли использовать getTop() в этом месте?

Извините, мысль слишком сложная! Это было так просто, как:

Class<?> serviceClazz = resolveServiceClass(requestContext);
        return injector.getInstance(serviceClazz);

1 Ответ

2 голосов
/ 25 сентября 2011

Для чего нужны getTop () и getNext () (в ServiceLayerDecorator)?

ServiceLayer использует шаблон цепочки ответственности: в тех случаях, когда ваш декоратор не имеет ничего конкретного, он должен делегировать следующему декоратору в цепочке (возвращается getNext), вызывая тот же метод с теми же аргументами. Если ваш декоратор изменяет аргументы или ему нужно вызвать другой метод, он должен вызвать его на getTop, чтобы вызов направлялся через все декораторы, а не только после них в цепочке.

Таким образом, вы используете getTop правильно и безопасно (посмотрите на LocatorServiceLayer от GWT, это именно то, что он делает).

Но ваш код (и код Этьена!) На самом деле можно сделать проще и лучше: просто переопределите createServiceLocator, чтобы получить экземпляр от вашего инжектора (такой же, как createLocator).

...