Java Guice注入和请求工厂:扩展ServiceLayerDecorator
我搜索了一个将Guice依赖项注入与Java Guice注入和请求工厂:扩展ServiceLayerDecorator,java,gwt,guice,requestfactory,Java,Gwt,Guice,Requestfactory,我搜索了一个将Guice依赖项注入与RequestFactory结合使用的解决方案。 我偶然发现: 它对我不起作用,所以我将InjectedServiceLayerDecorator.java实现更改为: 现在我的问题是: 关于RequestFactory的缓存机制,可以做些更好的事情吗(它还在工作吗?)? getTop()和getNext()(在ServiceLayerDecorator中)用于什么? 在这里使用getTop()正确/安全吗 对不起,我想得太复杂了! 这很容易: Class&
RequestFactory
结合使用的解决方案。
我偶然发现:
它对我不起作用,所以我将InjectedServiceLayerDecorator.java实现更改为:
现在我的问题是:
关于RequestFactory
的缓存机制,可以做些更好的事情吗(它还在工作吗?)?
getTop()
和getNext()
(在ServiceLayerDecorator中)用于什么?
在这里使用getTop()
正确/安全吗
对不起,我想得太复杂了!
这很容易:
Class<?> serviceClazz = resolveServiceClass(requestContext);
return injector.getInstance(serviceClazz);
Class serviceClazz=resolveServiceClass(requestContext);
返回injector.getInstance(serviceClazz);
getTop()和getNext()在ServiceLayerDecorator中的作用是什么
ServiceLayer使用责任链模式:如果您的装饰器没有任何特定的事情要做,它应该通过使用相同的参数调用相同的方法来委托给链中的下一个装饰器(由getNext
返回)。如果您的decorator更改了参数,或者需要调用另一个方法,那么它应该在getTop
上调用它,这样调用将通过所有decorator进行路由,而不仅仅是在链中位于其后面的decorator
因此,您对getTop
的使用是正确和安全的(请查看GWT中的LocatorServiceLayer,它就是这样做的)
但是您的代码(以及Etienne的代码!)实际上可以变得更简单、更好:只需覆盖
createServiceLocator
即可从您的注入器获取实例(与createLocator
相同)。感谢您的帮助!我现在使用createServiceLocator,它更简单,工作也更完美。