Comments 5
Собственно, нам показали как загрузить сервис без зависимостей.
А зависимости-то как инжектить?
Похоже на сравнение теплого с мягким, даже немного неполное. То, что про ServiceLoader могли не знать — конечно зря, но вот мне это не помогло, это не замена Spring для более-менее навороченного приложения
С таким же успехом можно использовать Map<Class, Supplier>. ServiceLoader служит для поиска имплементации сервиса в classpath. Кроме того, в Java 9 это также стандартный способ для связи между модулями. В сравнении с нормальным DI он не обеспечивает:
- транзитивные зависимости
- AOP и проксирование
- выбор имплементации сервиса
Кроме того, он завязан на classpath, поэтому когда нужно будет создать тестовый контекст с моками, вы просто замучаетесь.
Одним из ключевых аспектов Java-модулей была возможность полностью защитить классы в модуле от кода вне модуля.
Есть, правда, один нюанс. При прогоне юнит тестов Intellij IDEA склеивает все модули в один и весь код, который был написан с рассчётом на то, что модулей много, работать не будет.
ServiceLoader: встроенный DI-фреймворк, о котором вы, возможно, никогда не слышали