Несколько месяцев назад я писал об отсутствии инъекции зависимостей в игре . Как часть версии 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 был включен непосредственно в фреймворк.
