1
3
我们在我的工作中几乎就是这样做的。由于一些内部限制,我们目前停留在Java 5中,所以我们使用服务提供者的方式有点不同(因为没有像前面提到的Java 6那样访问Service Loopor),但它本质上是相同的。 我记得在某个地方读过,这是Guice开发人员推荐的一种首选方式,尽管他们想让这个开放性保持灵活性。 |
2
1
我已经考虑过这种方式,但我没有使用它,因为我害怕,我必须保持我的模块非常小,因为它不可能绑定相同的界面两次。我的问题是,如果我想使用另一个jar中的interface/class/enum/whatever,而这个jar定义了一个services/*文件,我就麻烦了,因为如果不将jar的内容作为模块加载,我就无法使用它。 我希望我的担心是明确的。 |
3
0
“因为不可能两次绑定同一个接口。” 这确实是错的!使用guice的multibinder,有一种方法可以处理同一接口的不同实现,可能绑定在不同的模块中。 与mark renouf(他的moduleloader看起来确实更好)相比,我找到了一个实际加载的稍微不同的解决方案,但是我的博客文章可能会更多地展示这种方法适用的环境(插件)以及扩展点的样子: Guice 2.0 Multibinder + Java ServiceLoader = Plugin mechanism |