Has anyone used ServiceLoader together with Guice?

冷暖自知 提交于 2019-12-02 17:18:14

We're doing almost exactly this at my work. We're currently stuck in java 5 due to some internal limitations, so we do it a bit differently using Service Provider (due to not having access to ServiceLocator until java 6 like you mentioned), but it essentially works the same.

I remember reading somewhere that this was one of the preferred ways the Guice developers recommended, though they want to leave this open for flexibility.

I considered this way already but i didnt use it because i was afraid, that i have to keep my modules extremely small, because its impossible to bind the same interface twice. My problem is, that if i want to use an interface/class/enum/whatever from another jar and that jar defined a services/* file i am screwed, because i cant make use of the content of the jar without loading it as a module.

I hope my concern is clear.

"because its impossible to bind the same interface twice."

This is indeed wrong! With Guice's Multibinder there is a way to work with different implementations of the same interface, possibly bound in different modules.

I came to a slightly different solution for the actual loading than Mark Renouf (his ModuleLoader looks indeed better), but my blog post may show a bit more about the environment where this approach is applicable (Plugins) and what the extension points look like:

Guice 2.0 Multibinder + Java ServiceLoader = Plugin mechanism

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!