• 8 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 11/8/22

Écrivez votre premier Hello World

Identifiez où et comment écrire votre code

Le moment tant attendu pour nous développeurs est arrivé ! Nous allons C-O-D-E-R !

Pour rappel, nous avons créé notre projet, puis nous l’avons structuré et configuré. Nous sommes maintenant à l’étape 3 : nous allons écrire le code métier, c’est-à-dire les traitements fonctionnels attendus. Pour réussir cette étape, nous allons devoir nous concentrer sur les beans que Spring doit gérer.

Quels sont les besoins fonctionnels pour notre application HelloWorld ?

Rien de plus simple, afficher le texte “Hello World!” dans la console.

De quoi avons-nous besoin pour atteindre cet objectif ?

Savoir écrire dans la console !

En Java, pour afficher du texte dans la console, la fonction System.out.println() permet de le faire. Mais où va-t-on placer notre code ?

Reprenons notre classe principale :

package com.openclassrooms.helloworld;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloworldApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloworldApplication.class, args);
    }

}

La méthode main sera théoriquement là où on écrirait notre code dans un programme Java simple. Mais en l'occurrence, cette dernière contient l’instruction “SpringApplication.run(HelloWorldApplication.class, args);”. Cette instruction permet de démarrer notre application, et ce n’est pas une bonne pratique d’ajouter autre chose dans la méthode main.

Oui, mais où met-on notre code, alors ?

Spring Boot fournit une interface nommée “CommandLineRunner”. En implémentant cette interface, la classe sera obligée de déclarer la méthode “public void run(String... args) throws Exception“. À partir de là, si la classe est un bean (c’est-à-dire chargée dans le contexte Spring), Spring Boot exécutera la méthode run à l’exécution du programme.

Vous pourriez :

  • soit modifier la classe HelloWorldApplication afin qu’elle implémente CommandLineRunner et la méthode run, avec comme corps de méthode un “System.out.prinln(“Hello World!”)” ;

  • soit créer une nouvelle classe qui implémente CommandLineRunner, la méthode run (même corps de méthode), et qui aura une annotation @Component (au-dessus du nom de la classe).

À vous de jouer

Je vous laisse la main, essayez d’implémenter votre premier HelloWorld !

Pour tester le résultat, si vous utilisez STS via le Boot dashboard, vous pouvez démarrer l’application.

Commencez par builder votre application via Maven :

  • clic droit sur le nom du projet dans Package Explorer ;

  • Run as ;

  • Maven install.

Puis lancez l’application via le Boot dashboard :

  • sous local, sélectionnez votre projet HelloWorld ;

  • cliquez sur la première icône du menu.

Le Boot Dashboard de STS donne accès à des actions pouvant être exécutées sur le projet HelloWorld. Par exemple, le démarrage du projet.
Boot Dashboard de STS avec le projet HelloWorld actionnable

Le résultat devrait être à peu près le suivant :

La console affiche différentes traces, et le texte “Hello World!”.
Console après démarrage du projet

Alors, avez-vous réussi ? C’est bon ?

Voici une solution que je vous propose :

package com.openclassrooms.helloworld;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloworldApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(HelloworldApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        System.out.println(“Hello World!”);
    }

}

C’est tout ! Félicitations, vous avez créé votre premier Hello World avec Spring Boot !

Manipulez des beans

Et les packages service et model, à quoi servent-ils ?

Nous ne nous sommes pas servi de ces packages car ils n’étaient pas utiles pour notre premier Hello World, mais ils le seront pour la suite ! À titre d'entraînement et pour vous faire découvrir d’autres notions importantes, je vous propose d’écrire quelques classes supplémentaires :

  • une classe HelloWorld.java qui contient un attribut nommé value de type String. Cette classe fait office d’objet métier, et doit être dans le package model. L’attribut value doit contenir le texte “Hello World!”. On ajoute également une méthode toString à cette classe, qui doit retourner le contenu de l’attribut value ;

  • une classe BusinessService.java qui contient une méthode dont le prototype est “public HelloWorld getHelloWorld()”. Cette méthode doit instancier un objet HelloWorld, et le retourner.
    Attention, la classe BusinessService.java doit être déclarée en tant que bean dans le context Spring. J’en appelle à votre mémoire : comment fait-on ?! Via une annotation, bien sûr : @Component fera l’affaire.

Modifions également du code existant :

  • La classe HelloWorldApplication doit être complétée par un nouvel attribut : “private BusinessService bs;”. Ce dernier sera annoté @Autowired.

  • Ensuite, la méthode run doit être modifiée afin qu’elle contienne le code suivant :

HelloWorld hw = bs.getHelloWorld();

System.out.println(hw);

Tout d’abord, on récupère un objet HelloWorld grâce au BusinessService, puis on transmet l’objet HelloWord à la méthode System.out.println. Lors de l’exécution de cette dernière, la méthode toString() de l’objet HelloWorld sera appelée, et le texte contenu dans l’attribut value s’affichera.

Quelque chose m’échappe, l’attribut bs n’est jamais instancié dans ce code ; comment se fait-il qu’on puisse l’utiliser ?

C’est grâce à l’IoC container de Spring ! Rappelez-vous, je vous ai appris dans la première partie le concept de l’injection de dépendances. En mettant l’annotation @Autowired sur l’attribut bs, Spring va chercher au sein de son contexte s’il existe un bean de type BusinessService

✅ S’il le trouve, il va alors instancier la classe de ce bean et injecter cette instance dans l’attribut

❌ S’il ne trouve pas de bean de ce type, Spring génère une erreur.

Résultat : nul besoin de gérer l’instanciation du BusinessService, Spring s’en occupe pour nous. :-)

Essayez de suivre les étapes que je viens d’indiquer, puis on se retrouve de suite dans ce screencast afin que je vous montre le résultat :

En résumé

  • Au sein d’une application Spring Boot, écrire du code implique de définir les beans utilisés par Spring.

  • On peut exécuter du code grâce à l’implémentation de l’interface CommandLineRunner et de la méthode run.

  • Pour qu’une classe soit déclarée en tant que bean, on l’annote @Component.

  • Pour qu’un bean soit injecté dans un attribut, on annote l’attribut @Autowired.

Example of certificate of achievement
Example of certificate of achievement