RestApplication.java

package com.example.rest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

import com.example.rest.Services.MigrationService;
import com.fasterxml.jackson.databind.SerializationFeature;

// Déclaration de la classe principale de l'application Spring Boot
@SpringBootApplication
public class RestApplication implements CommandLineRunner {

    // Déclaration d'une variable de type MigrationService pour gérer les migrations de données
    private final MigrationService MigrationService;

    // Injection de dépendance du service de migration via le constructeur
    @Autowired
    public RestApplication(MigrationService MigrationService) {
        this.MigrationService = MigrationService;
    }

    // Méthode principale pour démarrer l'application Spring Boot
    public static void main(String[] args) {
        SpringApplication.run(RestApplication.class, args);
    }

    // Bean pour encoder les mots de passe avec BCrypt
    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }

    // Bean pour configurer le constructeur de l'ObjectMapper de Jackson
    @Bean
    public Jackson2ObjectMapperBuilder jacksonBuilder() {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        // Ne pas échouer si un bean est vide
        builder.failOnEmptyBeans(false);
        // Désactiver la fonctionnalité qui fait échouer la sérialisation si un bean est vide
        builder.featuresToDisable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
        return builder;
    }

    // Méthode run qui est exécutée au démarrage de l'application
    @Override
    public void run(String... args) throws Exception {
        // Création d'objets échantillons
        MigrationService.createSampleObjects();
        // Ajout de nouveaux utilisateurs, profils et comptes
        MigrationService.addNewUsersProfilsAccounts();
        // Ajout d'objets dans l'inventaire
        MigrationService.ajouterDesObjetsDansInventaire();
        // Ajout de jeux aux profils
        MigrationService.ajouterGamesToProfils();
    }
}

 

1. Déclaration de la Classe Principale

@SpringBootApplication
public class RestApplication implements CommandLineRunner {
  • @SpringBootApplication est une annotation qui indique que cette classe est la classe principale de l'application Spring Boot.
  • implements CommandLineRunner signifie que cette classe implémente l'interface CommandLineRunner, ce qui permet d'exécuter du code au démarrage de l'application.

2. Injection de Dépendance

private final MigrationService MigrationService;

@Autowired
public RestApplication(MigrationService MigrationService) {
    this.MigrationService = MigrationService;
}
  • MigrationService est injecté dans cette classe via le constructeur. Cela permet d'accéder aux méthodes de MigrationService dans cette classe.
  • @Autowired est une annotation qui permet l'injection de dépendance automatique par Spring.

3. Méthode Principale

public static void main(String[] args) {
    SpringApplication.run(RestApplication.class, args);
}
  • C'est la méthode principale qui démarre l'application Spring Boot.

4. Configuration des Beans

@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
    return new BCryptPasswordEncoder();
}

@Bean
public Jackson2ObjectMapperBuilder jacksonBuilder() {
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
    builder.failOnEmptyBeans(false);
    builder.featuresToDisable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
    return builder;
}
  • Ces méthodes définissent des beans qui peuvent être injectés dans d'autres parties de l'application.
  • BCryptPasswordEncoder est utilisé pour encoder les mots de passe.
  • Jackson2ObjectMapperBuilder est configuré pour ne pas échouer lors de la sérialisation si un bean est vide.

5. Exécution au Démarrage

@Override
public void run(String... args) throws Exception {
    MigrationService.createSampleObjects();
    MigrationService.addNewUsersProfilsAccounts();
    MigrationService.ajouterDesObjetsDansInventaire();
    MigrationService.ajouterGamesToProfils();
}
  • La méthode run est exécutée au démarrage de l'application, car cette classe implémente CommandLineRunner.
  • Cette méthode appelle plusieurs méthodes de MigrationService pour peupler la base de données avec des données échantillons.

Conclusion

Ce code est un exemple typique d'une application Spring Boot avec injection de dépendance, configuration de beans, et exécution de code au démarrage. Il utilise un service de migration pour peupler la base de données avec des données échantillons lors du démarrage de l'application.

Modifié le: mercredi 27 septembre 2023, 08:46