Несколько месяцев назад я писал об отсутствии инъекции зависимостей в игре . Как часть версии 2.4 Play, Dependency Injection было включено как часть фреймворка. JSR 330 теперь реализован с использованием Guice . Эта статья продемонстрирует, как его использовать. В качестве ориентира я буду использовать тот же пример, что и в моей предыдущей статье .
Обратите внимание, что в этой статье используется не финальная версия Play Framework 2.4 (2.4.0-M2), поэтому часть платформы может измениться до финальной версии.
Предполагая, что у вас уже установлен Play Framework, и вы создали пример приложения. Если вам нужна помощь, пожалуйста, обратитесь к инструкциям здесь .
1. Создайте простой сервис, который мы будем внедрять в наш контроллер. Сначала создайте интерфейс по пути app / services / GreetingService.java
package services; public interface GreetingService { String greeting(); }
Вслед за его реализацией приложение / services / RealGreetingService.java.
package services; public class RealGreetingService implements GreetingService { @Override public String greeting() { return "bonjour"; } }
2.Войдите в интерфейс GreetingService, добавьте к нему аннотацию @ImplementedBy Guice.
@ImplementedBy(RealGreetingService.class) public interface GreetingService { public String greeting(); }
3. Перейдите к контроллеру приложений и вставьте в него GreetingService. Ключевыми моментами здесь являются переменная экземпляра с аннотацией @Inject и метод индекса контроллера, который больше не является статическим, поскольку ему необходим доступ к переменной экземпляра приветствия.
public class Application extends Controller { private final GreetingService greetingService; @Inject public Application(GreetingService greetingService) { this.greetingService = greetingService; } public Result index() { return ok(index.render(greetingService.greeting())); } }
4. Запустите приложение и перейдите на веб-сайт по адресу http: // localhost: 9000 . Это должно выглядеть так.
Я загрузил образец приложения здесь на https://github.com/codingricky/play-di-java . Как видите, теперь гораздо проще, когда DI был включен непосредственно в фреймворк.