Préparation d'entretien 100% Gratuit angularforall.com

Entretien Spring Boot Débutant : annotations et IoC

Spring-Boot Debutant Quiz-Springboot-Debutant Spring-Annotations Ioc Spring-Beans Spring-Data-Jpa Rest-Controllers Auto-Configuration Questions-Entretien-Spring Qcm-Springboot Java Framework-Backend Back-End
Débutant 🔀 Mixte 20 questions ⏱ 15 min
📝

Entretien Spring Boot Débutant : annotations et IoC

20 questions Spring Boot niveau débutant : annotations, IoC, beans, Spring Data JPA, REST controllers, application.properties et auto-configuration pour entretien.

20 questions ⏱ ~15 min Niveau Débutant

Partager

Banque de révision : les 30 questions corrigées

Voici l'intégralité des 30 questions de « Entretien Spring Boot Débutant : annotations et IoC », chacune avec sa bonne réponse et son explication. Le quiz interactif ci-dessus en tire une sélection aléatoire à chaque tentative — utilisez cette liste complète pour réviser.

  • Un framework Java qui simplifie la création d'applications Spring autonomes et prêtes pour la production (bonne réponse)
  • Un langage de programmation
  • Un serveur web comme Apache
  • Une base de données
Explication : Spring Boot est un framework qui facilite la création d'applications Spring en fournissant de l'auto-configuration, un serveur embarqué (Tomcat, Jetty) et des starters pour simplifier les dépendances.
Spring Boot suit le principe "Convention over Configuration". Il suffit d'ajouter la dépendance spring-boot-starter-web pour avoir une application web fonctionnelle.

  • @SpringBootApplication (bonne réponse)
  • @MainApplication
  • @SpringApp
  • @ApplicationBoot
Explication : @SpringBootApplication est une annotation de commodité qui combine trois annotations : @Configuration, @EnableAutoConfiguration et @ComponentScan.
La classe annotée avec @SpringBootApplication doit contenir la méthode public static void main(String[] args) et appeler SpringApplication.run().

  • Un descripteur de dépendances qui regroupe toutes les dépendances nécessaires pour une fonctionnalité spécifique (bonne réponse)
  • Une application de démonstration
  • Un outil de ligne de commande
  • Un type de test unitaire
Explication : Les starters (ex: spring-boot-starter-web) sont des POM qui regroupent toutes les dépendances nécessaires pour une fonctionnalité. Ils simplifient la gestion des dépendances et évitent les conflits de versions.
Quelques starters essentiels : spring-boot-starter-web (REST), spring-boot-starter-data-jpa (BDD), spring-boot-starter-test (tests).

  • application.properties ou application.yml (bonne réponse)
  • config.xml
  • settings.properties
  • web.xml
Explication : Les propriétés de configuration se trouvent dans application.properties ou application.yml (ou application.yaml), situés dans src/main/resources/.
Spring Boot charge automatiquement ce fichier. Vous pouvez avoir des profils différents avec application-dev.properties ou application-prod.properties.

  • Un mécanisme qui configure automatiquement les beans en fonction des dépendances présentes dans le classpath (bonne réponse)
  • Un outil qui écrit le code automatiquement
  • Une configuration qui ne nécessite aucun fichier
  • Un serveur qui démarre automatiquement
Explication : L'auto-configuration (@EnableAutoConfiguration) analyse le classpath et configure automatiquement les beans nécessaires. Si spring-webmvc est présent, Spring Boot configure automatiquement DispatcherServlet.
Vous pouvez exclure des auto-configurations avec @EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class }).

  • @RestController (bonne réponse)
  • @Controller
  • @Service
  • @Component
Explication : @RestController est une annotation spécialisée qui combine @Controller et @ResponseBody. Toutes les méthodes retournent directement des données (JSON/XML) au lieu de vues.
Pour un contrôleur MVC classique (avec vues), utilisez @Controller. Pour une API REST, utilisez @RestController.

  • Avec l'annotation @GetMapping sur la méthode (bonne réponse)
  • Avec l'annotation @GetMethod
  • Avec l'annotation @RequestMapping uniquement
  • Avec la configuration dans application.properties
Explication : @GetMapping("/chemin") est un raccourci pour @RequestMapping(method = RequestMethod.GET). Il existe aussi @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping.
Exemple complet : @GetMapping("/users/{id}") public User getUser(@PathVariable Long id) { ... }.

  • Via le constructeur avec @Autowired (optionnel depuis Spring 4.3), ou via @Autowired sur un champ (bonne réponse)
  • Uniquement avec le mot-clé new
  • Via des fichiers XML obligatoirement
  • En utilisant la méthode main()
Explication : L'injection de dépendances se fait via @Autowired. La méthode recommandée est l'injection par constructeur (plus testable, immuable). Depuis Spring 4.3, @Autowired est optionnel si la classe a un seul constructeur.
Préférez l'injection par constructeur : public UserService(UserRepository repo) { this.repo = repo; }. C'est plus sûr et facilite les tests.

  • Marquer une classe comme une entité JPA qui sera mappée à une table de base de données (bonne réponse)
  • Créer un contrôleur REST
  • Définir un service
  • Configurer l'application
Explication : @Entity (JPA) indique que la classe est une entité persistante. Chaque instance correspond à une ligne dans une table de base de données. On utilise aussi @Id pour la clé primaire et @GeneratedValue pour l'auto-incrémentation.
Par défaut, le nom de la table est le nom de la classe. Pour le personnaliser : @Table(name = "utilisateurs").

  • Créer une interface qui étend JpaRepository (bonne réponse)
  • Créer une classe qui implémente Repository
  • Écrire manuellement toutes les requêtes SQL
  • Utiliser l'annotation @Repository sur une classe
Explication : Il suffit de créer une interface qui étend JpaRepository<Entite, Long>. Spring Data JPA génère automatiquement l'implémentation avec les méthodes CRUD de base (save, findById, findAll, delete).
Pour des requêtes personnalisées, utilisez les query methods : List<User> findByLastName(String lastName);. Spring génère la requête SQL automatiquement.

  • Un serveur (Tomcat, Jetty, Undertow) intégré dans l'application, permettant de l'exécuter comme un simple JAR (bonne réponse)
  • Un serveur externe obligatoire
  • Un serveur de base de données
  • Un serveur de messagerie
Explication : Spring Boot inclut un serveur embarqué (Tomcat par défaut). L'application se lance comme un JAR autonome avec java -jar monapp.jar, sans déployer de WAR sur un serveur externe.
Pour changer de serveur, excluez Tomcat et incluez Jetty ou Undertow dans vos dépendances.

  • @PathVariable (bonne réponse)
  • @RequestParam
  • @PathVar
  • @URLVariable
Explication : @PathVariable lie une variable du template d'URL à un paramètre de méthode. Exemple : @GetMapping("/users/{id}") public User getUser(@PathVariable Long id).
Si le nom du paramètre diffère du nom dans l'URL : @PathVariable("id") Long userId.

  • Marquer une classe comme un service contenant la logique métier de l'application (bonne réponse)
  • Démarrer un service web
  • Configurer un service REST
  • Se connecter à une API externe
Explication : @Service est un stéréotype Spring qui indique que la classe contient la logique métier. C'est une spécialisation de @Component. Elle permet la détection automatique via le classpath scanning.
Techniquement, @Service est identique à @Component, mais elle apporte une sémantique métier claire dans votre code.

  • Ajouter server.port=8081 dans application.properties (bonne réponse)
  • Modifier le fichier web.xml
  • Changer le code source de Tomcat
  • Utiliser la ligne de commande uniquement
Explication : Dans application.properties : server.port=8081. Dans application.yml : server: port: 8081. On peut aussi le passer en ligne de commande : --server.port=8081.
Pour désactiver complètement le serveur web (application batch) : spring.main.web-application-type=none.

  • Un mécanisme pour isoler des configurations selon l'environnement (dev, test, prod) (bonne réponse)
  • Un type d'utilisateur
  • Une fonctionnalité de sécurité
  • Un historique de l'application
Explication : Les profils permettent de définir des configurations différentes par environnement. On peut avoir application-dev.properties et application-prod.properties, activés via spring.profiles.active=dev.
Activez un profil en ligne de commande : java -jar app.jar --spring.profiles.active=prod.

  • @RequestParam (bonne réponse)
  • @PathVariable
  • @QueryParam
  • @Param
Explication : @RequestParam extrait les paramètres de la query string. Exemple : /users?page=1@RequestParam int page. On peut rendre le paramètre optionnel : @RequestParam(defaultValue = "0") int page.
Pour un paramètre optionnel sans valeur par défaut : @RequestParam(required = false) String filter.

  • Avec @ExceptionHandler dans le contrôleur, ou @ControllerAdvice pour une gestion globale (bonne réponse)
  • Uniquement avec des try/catch
  • Les erreurs sont ignorées par défaut
  • Avec des fichiers de log
Explication : @ExceptionHandler dans un contrôleur gère les exceptions spécifiques. @ControllerAdvice permet une gestion globale des exceptions pour tous les contrôleurs. Spring fournit aussi ResponseEntityExceptionHandler.
Créez une classe annotée @RestControllerAdvice avec des méthodes @ExceptionHandler pour centraliser la gestion des erreurs.

  • Implémenter l'interface CommandLineRunner ou ApplicationRunner (bonne réponse)
  • Mettre le code dans la méthode main()
  • Utiliser un servlet
  • Créer un bean spécial
Explication : CommandLineRunner et ApplicationRunner sont des interfaces avec une méthode run() exécutée après l'initialisation du contexte Spring. On peut avoir plusieurs runners, ordonnés avec @Order.
CommandLineRunner reçoit les arguments bruts (String[]), ApplicationRunner reçoit les arguments parsés (ApplicationArguments).

  • Injecter une valeur depuis application.properties dans un champ d'un composant Spring (bonne réponse)
  • Valider les données d'un formulaire
  • Évaluer une expression mathématique
  • Définir le prix d'un produit
Explication : @Value("${propriete}") injecte la valeur d'une propriété de configuration dans un champ. On peut aussi fournir une valeur par défaut : @Value("${propriete:defaut}").
Pour injecter des propriétés complexes, utilisez @ConfigurationProperties sur une classe dédiée.

  • Avec @Bean dans une classe @Configuration, ou avec @Component et ses stéréotypes (@Service, @Repository, @Controller) (bonne réponse)
  • Uniquement avec le fichier XML
  • Avec le mot-clé new
  • Avec la méthode main()
Explication : Deux façons principales : 1) Annoter une classe avec @Component (ou stéréotypes), scannée automatiquement. 2) Déclarer une méthode @Bean dans une classe @Configuration pour un contrôle explicite.
Utilisez @Bean quand vous ne contrôlez pas le code source de la classe (ex: beans de bibliothèques tierces).

  • Une abstraction au-dessus de JPA qui simplifie l'accès aux données avec des repositories et des query methods (bonne réponse)
  • Une base de données
  • Un contrôleur REST
  • Un outil de migration de base de données
Explication : Spring Data JPA facilite l'implémentation de la couche d'accès aux données. Il suffit de définir des interfaces étendant JpaRepository. Les méthodes CRUD et les query methods sont générées automatiquement.
Pour des requêtes complexes, utilisez @Query avec JPQL ou SQL natif : @Query("SELECT u FROM User u WHERE u.email = ?1").

  • Avec @Valid ou @Validated sur le paramètre de la méthode, et des annotations de validation sur l'entité (@NotNull, @Size, @Email) (bonne réponse)
  • Manuellement avec des if/else
  • La validation n'est pas supportée
  • Avec JavaScript uniquement
Explication : Spring s'intègre avec Bean Validation (javax.validation / jakarta.validation). On annote le DTO avec @NotNull, @Size, @Email, et on ajoute @Valid dans le contrôleur.
Pour les groupes de validation : @Validated(OnCreate.class). Très utile pour différencier la création et la mise à jour.

  • Un module qui fournit des endpoints de monitoring et de gestion pour l'application (santé, métriques, info) (bonne réponse)
  • Un outil pour écrire des tests
  • Un module de sécurité
  • Un générateur de code
Explication : Spring Boot Actuator (dépendance spring-boot-starter-actuator) expose des endpoints comme /actuator/health (santé), /actuator/metrics (métriques), /actuator/info.
En production, sécurisez les endpoints Actuator avec Spring Security. Exposez uniquement ce qui est nécessaire.

  • Ajouter les propriétés spring.datasource.url, spring.datasource.username, spring.datasource.password dans application.properties (bonne réponse)
  • Modifier le code source de Hibernate
  • Créer un fichier database.xml
  • Utiliser la console H2 uniquement
Explication : Spring Boot configure automatiquement une datasource si les drivers sont dans le classpath. Il suffit de définir spring.datasource.url, username, password et driver-class-name.
Pour du développement rapide, utilisez H2 (base en mémoire) : spring.datasource.url=jdbc:h2:mem:testdb.

  • Utiliser Spring Data REST qui expose automatiquement des endpoints REST à partir des repositories (bonne réponse)
  • Écrire manuellement chaque endpoint
  • Importer une API externe
  • Utiliser un générateur de code externe
Explication : Spring Data REST (dépendance spring-boot-starter-data-rest) expose automatiquement les repositories JPA en API REST. Un UserRepository devient accessible via /users avec GET, POST, PUT, DELETE.
Pour personnaliser les endpoints, utilisez @RepositoryRestResource(path = "utilisateurs").

  • La méthode qui démarre l'application Spring Boot, crée le contexte et lance le serveur embarqué (bonne réponse)
  • Une méthode de test
  • Une méthode pour exécuter des requêtes SQL
  • Une méthode de logging
Explication : SpringApplication.run(MaClasse.class, args) est le point d'entrée. Elle crée le ApplicationContext, déclenche l'auto-configuration, scanne les composants et démarre le serveur embarqué.
Vous pouvez personnaliser le démarrage avec new SpringApplicationBuilder(MaClasse.class).profiles("dev").run(args).

  • Gérer automatiquement les transactions : début, commit en cas de succès, rollback en cas d'exception (bonne réponse)
  • Traduire l'application en plusieurs langues
  • Transférer des données entre services
  • Transformer des objets JSON
Explication : @Transactional définit une méthode ou classe comme transactionnelle. Spring gère le début, le commit (si OK) et le rollback (si exception non vérifiée). Cela garantit l'intégrité des données.
Par défaut, le rollback se fait pour les RuntimeException et Error. Pour les exceptions vérifiées, utilisez @Transactional(rollbackFor = Exception.class).

  • Avec l'attribut exclude de @EnableAutoConfiguration ou spring.autoconfigure.exclude dans application.properties (bonne réponse)
  • Supprimer le fichier de configuration
  • Commenter le code source de Spring
  • Redémarrer le serveur
Explication : On peut exclure via @EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class }) ou via spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.
Utilisez cette fonctionnalité avec précaution. Comprenez d'abord pourquoi l'auto-configuration ne convient pas avant de l'exclure.

  • Un module qui améliore l'expérience de développement avec le redémarrage automatique, le LiveReload et des configurations par défaut (bonne réponse)
  • Un outil de déploiement
  • Un framework de test
  • Une base de données de développement
Explication : Spring Boot DevTools (spring-boot-devtools) offre le redémarrage automatique lors de changements de code, le LiveReload pour rafraîchir le navigateur, et désactive certains caches en développement.
En production, DevTools est automatiquement désactivé. Incluez-le en dépendance optional ou developmentOnly.

  • Un package principal avec sous-packages controller, service, repository et model/entity (bonne réponse)
  • Tous les fichiers dans le même package
  • Un package par développeur
  • Une structure aléatoire
Explication : La structure recommandée : com.example.demo (package racine), avec .controller, .service, .repository, .model (ou .entity), .dto, .config, .exception.
Le package racine doit contenir la classe @SpringBootApplication. Les sous-packages sont automatiquement scannés.