Статьи

Игра с инъекцией зависимостей

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

Рекомендации