我搜索了一种将Guice Dependency注入与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);

最佳答案

getTop()和getNext()(在ServiceLayerDecorator中)的用途是什么?

ServiceLayer使用责任链模式:如果您的装饰器没有特定的事情要做,则应通过使用相同的参数调用相同的方法来委托链中的下一个装饰器(由getNext返回)。如果您的装饰器更改了参数,或者需要调用其他方法,则应在getTop上对其进行调用,以使该调用通过所有装饰器进行路由,而不仅仅是路由在其自身之后的所有装饰器。

因此,您对getTop的使用是正确且安全的(请查看GWT的LocatorServiceLayer,这正是它的作用)。

但是实际上您的代码(和Etienne的代码!)可以变得更简单,更好:只需重写createServiceLocator即可从注射器中获取实例(与createLocator相同)。

10-07 13:57