Instanciation de variables dans Controller au démarrage de l’application à l’aide de Play Framework

J’utilise Java via Play Framework pour implémenter une API. J’essaie d’instancier quelques variables au début de l’application qui devraient durer toute la vie de l’application et qui doivent être utilisées dans mon HomeController. Ces variables sont des objects pouvant être utilisés pour appeler des fonctions d’une classe spécifique.

J’ai lu que la meilleure façon d’implémenter du code qui s’exécute au début de l’application est d’utiliser l’ dependency injection, mais je n’ai pas compris comment le faire.

Pouvez-vous s’il vous plaît clarifier comment cela est fait?

Je vous remercie.

Vous pouvez trouver ici et ici d’ autres exemples d’dependency injection dans Play.

Après avoir eu l’idée, il devrait être facile à mettre en œuvre. Pour définir un object, celui-ci doit durer tout le cycle de vie de l’application:

  1. Définissez la classe (d’un tel object) avec l’annotation @Singleton:

    @Singleton public class MyClass4AppLifecycle { public MyClass4AppLifecycle() { ... } .... } 
  2. Ajoutez au contrôleur un membre de données avec une annotation @Inject:

     public class MyController extends Controller { @Inject private MyClass4AppLifecycle myGlobalObject; ... 

    Note: comme vous avez mentionné plusieurs objects, l’annotation membre injecter semble plus appropriée, qu’une annotation constructeur.

  3. Enregistrez votre classe pour l’dependency injection dans le module par défaut (c’est le moyen le plus simple):

     public class Module extends AbstractModule { @Override protected void configure() { bind(MyClass4AppLifecycle.class).asEagerSingleton(); } } 
  4. Répétez les trois ci-dessus pour chaque type que vous devez avoir globalement

L’exemple sur l’dependency injection utilise Google Guice. La première consiste à inclure cette dépendance dans le fichier build.sbt.

vous pouvez le faire en ajoutant

 // https://mvnrepository.com/artifact/com.google.inject/guice libraryDependencies += "com.google.inject" % "guice" % "4.1.0" 

Vous pouvez alors choisir d’étendre GlobalSettings ( https://www.playframework.com/documentation/2.5.x/GlobalSettings ) et choisir d’injecter un injecteur Guice.

Un exemple de la mise en œuvre est ici: https://dzone.com/articles/guicing-play-framework

J’espère que cela aide