Injection de dépendances dans Spring Boot : l'assistant derrière le rideau
Avez-vous déjà eu l'impression que Spring Boot est un majordome magique qui, d'une manière ou d'une autre, sait ce dont vous avez besoin et vous le remet sur un plateau d'argent ? Il s’agit essentiellement de Injection de dépendances (DI). Vous avez probablement utilisé DI une centaine de fois sans vous demander : Comment diable Spring sait-il quoi injecter et quand ?
Si cela vous ressemble, bienvenue à bord ! Nous allons faire une visite amusante en coulisses de la manière dont l'interface DI de Spring Boot fonctionne de manière magique, en commençant par la façon dont elle gère les beans, @Autowired et leurs cycles de vie, de la naissance à la destruction. À la fin de ce blog, vous appliquerez vos nouvelles connaissances en DI comme un pro.
En termes simples, l'injection de dépendance, c'est comme se faire livrer des courses à votre porte au lieu d'aller les acheter vous-même. Il s'agit de déléguer la responsabilité d'"injecter" des dépendances (beans) à Spring afin que vous n'ayez pas à créer manuellement des objets ni à vous soucier de leur cycle de vie.
Imaginez que vous êtes un chef dirigeant une cuisine occupée (votre candidature). Vous n’avez pas le temps de manquer d’œufs, de lait et de sucre à chaque fois que vous en avez besoin. Ne serait-il pas formidable si quelqu'un (par exemple, Spring) par magie livrait tout ce dont vous aviez besoin exactement quand vous en aviez besoin ?
C'est exactement ce que fait Spring DI : il trouve tous les ingrédients (haricots) dont vous avez besoin et les injecte dans votre code sans que vous leviez le petit doigt. Plutôt sympa, non ?
D'accord, alors c'est ici que la magie opère. Lorsque vous exécutez votre application Spring Boot à l'aide de SpringApplication.run(), Spring démarre le ApplicationContext : considérez-le comme le manuel d'instructions de votre majordome. Il sait exactement quoi récupérer et quand.
Décomposons-le étape par étape :
Initialisation du conteneur : Lorsque vous appuyez sur SpringApplication.run(), le conteneur Spring (alias ApplicationContext) entre en action. C'est comme ouvrir les portes de votre restaurant virtuel, où tout est prêt à rouler.
Création du bean : Le conteneur analyse votre code à la recherche d'annotations telles que @Component, @Service, @Repository ou @Controller. Chacun d'eux devient un bean, un objet géré par Spring. Considérez-les comme les ingrédients essentiels de votre cuisine : farine, sucre, œufs, etc.
BeanFactory à la rescousse : Spring Boot utilise BeanFactory pour créer et gérer ces beans. Cette usine sait exactement comment et quand créer vos beans, s'assurant qu'ils sont disponibles en cas de besoin.
Injection de dépendance : Une fois les beans prêts, Spring les injecte partout où vous avez marqué avec @Autowired. C’est comme avoir un barista qui non seulement prépare le café, mais le livre également au comptoir précis où il est nécessaire. Vous n'avez même pas besoin d'y penser : tout apparaît.
Ah, la bonne vieille annotation @Autowired. Vous êtes-vous déjà demandé comment Spring sait comme par magie où injecter les dépendances ? C’est un peu comme un détective qui correspond à vos besoins avec les bons beans dans son registre.
Voici comment cela fonctionne :
Correspondance de type : Lorsque Spring voit @Autowired, il recherche un bean du même type dans le conteneur. Imaginez que vous ayez commandé des grains de café (une classe CoffeeService), Spring regarde dans son référentiel de grains et dit : « Ah, je les ai ! Laissez-moi vous les injecter. »
Qualificateurs : Mais que se passe-t-il si vous avez plusieurs beans du même type ? Dans ce cas, Spring pourrait paniquer et lancer une exception telle que « NoUniqueBeanDefinitionException ». Mais ne vous inquiétez pas, vous pouvez calmer Spring en utilisant @Qualifier pour spécifier quel bean injecter :
@Autowired @Qualifier("espressoBean") private CoffeeService coffeeService;
public class CoffeeShop { private final CoffeeService coffeeService; @Autowired public CoffeeShop(CoffeeService coffeeService) { this.coffeeService = coffeeService; } }
Spring passe en pilote automatique, injecte les beans dans le constructeur, et voilà, vous êtes prêt à partir !
Les beans dans Spring Boot ne sont pas que des objets. Ils ont une vie bien remplie, avec une histoire d’origine, une carrière épanouissante et une éventuelle retraite. Suivons le cycle de vie d'un bean :
Instanciation (naissance) : Tout d'abord, Spring crée une instance du bean. C’est comme la naissance du haricot. Le printemps dit : « Et voilà, petit gars ! » et le transmet dans le conteneur.
Injection de dépendances : Après avoir créé le bean, Spring le remplit avec des dépendances (comme les ingrédients d'une recette de gâteau). C'est là que @Autowired entre en jeu. Votre bean obtient tout ce dont il a besoin pour fonctionner correctement.
Post-Initialisation : Si vous avez des méthodes annotées avec @PostConstruct, Spring les appelle après avoir injecté les dépendances. C'est comme donner une nouvelle couche de peinture au grain avant qu'il ne se mette au travail.
Prêt pour l'action : Votre haricot est désormais bien vivant. Il est prêt à conquérir le monde !
Pré-destruction (retraite) : Lorsque l'application s'arrête, Spring appelle les méthodes @PreDestroy pour donner au bean une sortie en douceur. Il s'agit de la fête de retraite du bean, où il nettoie ses ressources.
Destruction du bean : Enfin, le bean est détruit. Il est temps de reposer en paix.
Voici comment suivre ces événements du cycle de vie dans le code :
@Component public class CoffeeBean { @PostConstruct public void onStart() { System.out.println("Bean is ready to brew some coffee!"); } @PreDestroy public void onEnd() { System.out.println("Bean is retiring. Goodbye, world!"); } }
Tous les haricots n'ont pas la même espérance de vie. Spring Boot vous permet de définir différentes portées pour les beans, essentiellement leur durée de vie. Les deux plus courants sont :
Singleton (par défaut) : Il n'y a qu'une seule instance du bean, partagée dans l'ensemble de l'application. C'est comme avoir une seule machine à expresso pour tout le café.
Prototype : Une nouvelle instance du bean est créée à chaque fois que cela est nécessaire. Imaginez avoir une nouvelle machine à expresso pour chaque commande. C’est gourmand en ressources, mais parfois nécessaire.
@Component @Scope("prototype") public class LatteMachine { // This bean is made fresh for every use }
Très bien, parlons de ce qui se passe lorsque vous exécutez votre application Spring Boot à l'aide de SpringApplication.run(). Cette méthode est le grand maître qui lance tout le processus DI.
Considérez votre application Spring Boot comme un café. Vous êtes le propriétaire et les grains sont vos ingrédients : café, lait, sucre, etc. Au lieu de courir partout pour gérer vous-même ces ingrédients, vous avez un barista (le conteneur Spring) qui récupère tout et vous livre exactement là où il se trouve. nécessaire.
Tout ce que vous avez à faire est de passer les commandes (configurer vos champs @Autowired), et le barista s'occupe du reste, en préparant parfaitement cette tasse de café remplie de dépendances pour vos clients (application).
En fin de compte, Injection de dépendances est ce qui fait de Spring Boot un framework si puissant. Il vous simplifie la vie, gère vos beans et garantit que votre code est facile à maintenir et à étendre.
Maintenant que vous avez jeté un coup d’œil derrière le rideau, vous disposez d’un super pouvoir que de nombreux développeurs tiennent pour acquis. Alors allez-y, commencez à utiliser DI comme l'assistant que vous êtes maintenant. Et la prochaine fois que vous verrez @Autowired, vous saurez exactement ce qui se passe sous le capot.
J'espère que ce blog vous a permis de mieux comprendre Spring Boot DI et vous a laissé le sourire. Maintenant, va injecter des haricots et montre à tes amis comment c'est fait !
Qu'en est-il d'un blog amusant, informatif et facile à comprendre ? Faites-moi savoir si vous souhaitez d'autres ajustements !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3