Maison Java javaDidacticiel Comment Spring injecte les objets et analyse du processus de création du bean

Comment Spring injecte les objets et analyse du processus de création du bean

Nov 28, 2019 pm 05:47 PM
bean spring

Comment Spring injecte les objets et analyse du processus de création du bean

Vous devez d'abord connaître une implémentation approximative

● Ce processus d'injection doit être implémenté dans BeanPostProcessor

●spring instancie les beans dans beanFactory.getBean, c'est-à-dire un chargement paresseux

● Selon le deuxième article, c'est-à-dire que tous les BeanPostProcessors ne seront appelés que lorsque getBean

● Le deuxième article mentionnait que le processus d'actualisation de BeanFactory enregistre uniquement BeanPostProcessor et est en fait exécuté dans la méthode getBean

(vidéo recommandée : tutoriel vidéo Java )

MergedBeanDefinitionPostProcessor est également une sorte de BeanPostProcessor. Il crée une nouvelle fonction de cycle de vie, remplaçant la fonction de cycle de vie par défaut de BeanPostProcessor. un code source court

for (BeanPostProcessor bp : getBeanPostProcessors()) {
    if (bp instanceof MergedBeanDefinitionPostProcessor) {
        MergedBeanDefinitionPostProcessor bdp = (MergedBeanDefinitionPostProcessor) bp;
        bdp.postProcessMergedBeanDefinition(mbd, beanType, beanName);
    }
}
Copier après la connexion

Il permet de modifier la définition du Bean dans un non-BeanFactoryProcess

InstantiationAwareBeanPostProcessor est également un BeanPostProcessor Il redéfinit également une fonction de cycle de vie, qui permet d'injecter des valeurs d'attribut. dans les objets d'attribut

@Autowired Le processus de chargement des définitions

Ne regardons pas d'abord le processus de création du bean, mais regardons la sous-classe d'implémentation de MergedBeanDefinitionPostProcessor Voici le. nom deviner

AutowiredAnnotationBeanPostProcessor Cela devrait être ce qu'il fait, afin que nous puissions regarder directement le code de la méthode postProcessMergedBeanDefinition de

AutowiredAnnotationBeanPostProcessor.

Suite à l'appel de la méthode, vous pouvez savoir que buildAutowiringMetadata est l'endroit où se trouvent réellement ces annotations. Enfin, checkConfigMembers enregistre Member dans la définition du bean. Les lecteurs qui souhaitent savoir comment le trouver peuvent vérifier la source. coder eux-mêmes.

Ici, nous enregistrons simplement le membre dans la définition du bean, et l'instanciation réelle se produit pendant le processus de remplissage du bean. Parlons ci-dessous du processus de création du bean pour savoir quand il est injecté.

Processus de création du bean

Comme mentionné précédemment, Spring crée Bean dans le processus getBean. La création d'un bean est divisée en plusieurs étapes

1. Obtenez la définition du bean

2. new Bean()

3 Exécuter la fonction de cycle de vie (avant)

4 Créer des dépendances

5 . le bean

6. Exécuter la fonction de cycle de vie (après)

L'entrée est BeanFactory.getBean et la classe d'implémentation de BeanFactory est DefaultListableBeanFactory Vous pouvez les trouver dans le processus d'actualisation de BeanFactory.

Selon le code source, si le bean n'existe pas encore, le processus de création du bean sera exécuté

Récupérez la définition du bean dans ce code source

final RootBeanDefinition mbd = getMergedLocalBeanDefinition(beanName);
Copier après la connexion

Suivez-le , recherchez ses dépendances en fonction de l'élément de définition du bean et créez le bean. On peut voir que le bean est créé de manière récursive

String[] dependsOn = mbd.getDependsOn();
for (String dep : dependsOn) {
    getBean(dep);
}
Copier après la connexion

puis le bean est créé

if (mbd.isSingleton()) {
    createBean(beanName, mbd, args);
}
// 真正的执行在 doCreateBean 过程中
Object beanInstance = doCreateBean(beanName, mbdToUse, args);
Copier après la connexion

. est de créer le bean. La première étape consiste à créer le bean. La deuxième étape consiste à créer le bean. Étape 1 : Exécutez tous les processeurs, y compris MergedBeanDefinitionPostProcessor, donc enregistrez l'option d'injection

if (instanceWrapper == null) {
    instanceWrapper = createBeanInstance(beanName, mbd, args);
}
Copier après la connexion

dans cette étape. créer le bean. La troisième étape consiste à remplir le bean. L'injection @Autowired effectuée ici est

applyMergedBeanDefinitionPostProcessors(mbd, beanType, beanName);
Copier après la connexion

dans la fonction postProcessPropertyValues ​​​​de AutowiredAnnotationBeanPostProcessor

populateBean(beanName, mbd, instanceWrapper);
Copier après la connexion

En raison des dépendances. ont été obtenus précédemment et jetés dans le conteneur, vous pouvez donc ici les écrire directement en utilisant la réflexion

Créer le bean La quatrième étape consiste à initialiser le bean. Il y a une méthode d'injection ici La méthode d'injection s'est produite à l'origine. en cours d'initialisation du bean, et la fonction de cycle de vie est exécutée, y compris le cycle de vie pré-post du BeanPostProcessor, la méthode d'initialisation, etc.

Petite explication : AutowiredAnnotationBeanPostProcessor est à la fois un MergedBeanDefinitionPostProcessor et un InstantiationAwareBeanPostProcessor

Cet article provient du site Web php chinois, colonne

tutoriel Java

, bienvenue pour apprendre !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Un nouveau paradigme de programmation, quand Spring Boot rencontre OpenAI Un nouveau paradigme de programmation, quand Spring Boot rencontre OpenAI Feb 01, 2024 pm 09:18 PM

En 2023, la technologie de l’IA est devenue un sujet brûlant et a un impact énorme sur diverses industries, notamment dans le domaine de la programmation. Les gens sont de plus en plus conscients de l’importance de la technologie de l’IA, et la communauté Spring ne fait pas exception. Avec l’évolution continue de la technologie GenAI (Intelligence Artificielle Générale), il est devenu crucial et urgent de simplifier la création d’applications dotées de fonctions d’IA. Dans ce contexte, « SpringAI » a émergé, visant à simplifier le processus de développement d'applications fonctionnelles d'IA, en le rendant simple et intuitif et en évitant une complexité inutile. Grâce à « SpringAI », les développeurs peuvent plus facilement créer des applications dotées de fonctions d'IA, ce qui les rend plus faciles à utiliser et à exploiter.

Utilisez Spring Boot et Spring AI pour créer des applications d'intelligence artificielle générative Utilisez Spring Boot et Spring AI pour créer des applications d'intelligence artificielle générative Apr 28, 2024 am 11:46 AM

En tant que leader du secteur, Spring+AI fournit des solutions de pointe pour divers secteurs grâce à son API puissante et flexible et ses fonctions avancées. Dans cette rubrique, nous examinerons les exemples d'application de Spring+AI dans divers domaines. Chaque cas montrera comment Spring+AI répond à des besoins spécifiques, atteint ses objectifs et étend ces LEÇONS APPRISES à une gamme plus large d'applications. J'espère que ce sujet pourra vous inciter à comprendre et à utiliser plus profondément les possibilités infinies de Spring+AI. Le framework Spring a une histoire de plus de 20 ans dans le domaine du développement logiciel, et cela fait 10 ans que la version Spring Boot 1.0 est sortie. Maintenant, personne ne peut contester ce printemps

Quelles sont les méthodes de mise en œuvre des transactions programmatiques Spring ? Quelles sont les méthodes de mise en œuvre des transactions programmatiques Spring ? Jan 08, 2024 am 10:23 AM

Comment implémenter les transactions programmatiques Spring : 1. Utilisez TransactionTemplate ; 2. Utilisez TransactionCallback et TransactionCallbackWithoutResult ; 3. Utilisez les annotations Transactional ; 4. Utilisez TransactionTemplate en combinaison avec @Transactional ;

Comment implémenter des tâches planifiées dans Java Spring Comment implémenter des tâches planifiées dans Java Spring May 24, 2023 pm 01:28 PM

Java implémente les tâches planifiées dans la bibliothèque fournie avec Jdk, il existe deux façons d'implémenter les tâches planifiées, l'une est Timer et l'autre est ScheduledThreadPoolExecutor. Lorsque Timer+TimerTask crée un Timer, il crée un thread, qui peut être utilisé pour planifier des tâches TimerTask. Timer a quatre méthodes de construction, et vous pouvez spécifier le nom du thread Timer et s'il doit être défini comme thread démon. Le nom par défaut est Timer-number et il ne s'agit pas d'un thread démon par défaut. Il existe trois méthodes principales : cancel() : mettre fin à la planification des tâches et annuler toutes les tâches actuellement planifiées. purge() : supprimer les tâches de la file d'attente des tâches.

Les différences et les connexions entre Spring Boot et Spring Cloud Les différences et les connexions entre Spring Boot et Spring Cloud Jun 22, 2023 pm 06:25 PM

SpringBoot et SpringCloud sont tous deux des extensions de Spring Framework qui aident les développeurs à créer et déployer des applications de microservices plus rapidement, mais elles ont chacune des objectifs et des fonctions différents. SpringBoot est un framework permettant de créer rapidement des applications Java, permettant aux développeurs de créer et de déployer plus rapidement des applications basées sur Spring. Il fournit un moyen simple et facile à comprendre de créer des applications Spring autonomes et exécutables.

Les 7 annotations les plus utilisées dans Spring, l'organisation la plus puissante de l'histoire ! Les 7 annotations les plus utilisées dans Spring, l'organisation la plus puissante de l'histoire ! Jul 26, 2023 pm 04:38 PM

Avec la mise à jour et l'itération de la technologie, Java5.0 a commencé à prendre en charge les annotations. En tant que framework leader en Java, Spring a lentement commencé à abandonner la configuration XML depuis sa mise à jour vers la version 2.5, et davantage d'annotations sont utilisées pour contrôler le framework Spring.

Comment définir le niveau d'isolement des transactions au printemps Comment définir le niveau d'isolement des transactions au printemps Jan 26, 2024 pm 05:38 PM

Comment définir le niveau d'isolement des transactions dans Spring : 1. Utilisez l'annotation @Transactional ; 2. Définissez-le dans le fichier de configuration Spring ; 3. Utilisez PlatformTransactionManager ; Introduction détaillée : 1. Utilisez l'annotation @Transactional, ajoutez l'annotation @Transactional à la classe ou à la méthode qui nécessite la gestion des transactions et définissez le niveau d'isolement dans l'attribut 2. Dans le fichier de configuration Spring, etc.

Apprenez Spring Cloud à partir de zéro Apprenez Spring Cloud à partir de zéro Jun 22, 2023 am 08:11 AM

En tant que développeur Java, apprendre et utiliser le framework Spring est une compétence essentielle. Avec la popularité du cloud computing et des microservices, apprendre et utiliser Spring Cloud est devenu une autre compétence qui doit être maîtrisée. SpringCloud est un ensemble d'outils de développement basé sur SpringBoot permettant de créer rapidement des systèmes distribués. Il fournit aux développeurs une série de composants, notamment l'enregistrement et la découverte de services, un centre de configuration, l'équilibrage de charge et des disjoncteurs, etc., permettant aux développeurs de créer des micro-ordinateurs.

See all articles