Hi Tom,

Nice to see thoughts about modular services.

FYI Jigsaw's goals in this area were quite limited (http://openjdk.java.net/projects/jigsaw/spec/reqs/#services) and the static provider method was a relatively late add-on (http://openjdk.java.net/projects/jigsaw/spec/issues/#services).

I agree that a static provider method offers a basic level of indirection (e.g. multiple `provides` directives can employ the same one if its return type implements multiple services) but it doesn't add much in the way of abstraction (e.g. over the desired service). This isn't the only place where ServiceLoader suffers from a lack of abstraction: you can't parameterize services because there's no way to request an implementation of a parameterized service (i.e. you can't say `ServiceLoader.load(ServiceA<Foo>.class)`).

Frankly, we are not likely to revisit any of these limitations in the near future, but I think that ServiceLoader will always be a handy built-in option for limited use cases.

Alex

On 3/2/2019 9:19 AM, Tom De Wolf wrote:
The current ServiceLoader mechanism and Java Modules have a limited set of
options to provide an instance for a service from a module. Or you use the
constructor, or you use a static 'provider' method.

When interacting with frameworks like Spring this does not give a lot of
flexibility. I described the problem statement and some ideas which could
be considered for evolving the services support in the module system in
this blog post:

https://devcreativity.wordpress.com/2019/03/02/java-modules-wish-list-provide-services-using-lambda-functions-and-more/


I would appreciate if some of the oracle contributors that worked on the
module system could read the post and provide me and the community with
some feedback if such a change could be a good idea?

Thanks in advance

Tom

Reply via email to