Maison > Java > javaDidacticiel > Spring-: Spring-Bean-Lifecycle-Exécution Ordre

Spring-: Spring-Bean-Lifecycle-Exécution Ordre

Mary-Kate Olsen
Libérer: 2025-01-29 18:08:15
original
593 Les gens l'ont consulté

spring-: spring-bean-lifecycle-execution-order

Cet article analyse de manière approfondie le cycle de vie de Spring Bean, qui couvre toutes les interfaces et méthodes de cycle de vie associées couvrant l'interface de haricot pour présenter pleinement le processus de fonctionnement du Bean.


I. Ordre d'exécution de la logique du cycle de vie des haricots de printemps (de l'instanciation à la destruction)

(instancié à la destruction)

    Définition de chargement du bean (traitement des métadonnées)
  1. Spring à partir du fichier de configuration

    (@configuration), du fichier XML ou de la numérisation des composants (@Component)
      Lire la définition du bean.
    • Ceci est étapes de traitement des métadonnées , aucune instance n'a été créée.
    • Méthode liée:
    • BeanDefinitionRegistry#registerBeanDefinition()
  2. bean instancié (créé par objet)

  1. Créez l'objet bean réel à travers les voies suivantes:

    La fonction constructive est instanciée

      Méthode d'usine
      • Méthode liée:
    • Définissez le nom de bean InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation() (
    • )
Si Bean Implément
, le printemps appellera la méthode
    pour
  1. informer le nom du propre nom de Bean

    . Cela s'est produit avant avant l'injection BeanNameAware#setBeanName(String name).

      Cas d'utilisation:
    • Si Bean a besoin de connaître son nom BeanNameAware dans le contexte de l'application. setBeanName()
    • Définissez le chargeur de classe Bean ()
    • Si Bean doit accéder à son chargeur de classe
    , Spring appellera cette méthode.
Utilisation:
<code class="language-java">public class MyBean implements BeanNameAware {
    @Override
    public void setBeanName(String name) {
        System.out.println("Bean Name Set: " + name);
    }
}</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion
Si Bean
Chargez dynamiquement la classe
    à l'exécution.
  1. BeanClassLoaderAware#setBeanClassLoader(ClassLoader classLoader)

    • Réglez Beanfactory (
    • )
    • Spring injecte beanfactory dans le haricot.
    CAS D'UTILISATION:
  2. Autoriser le bean
Obtenez un autre bean
<code class="language-java">public class MyBean implements BeanClassLoaderAware {
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("ClassLoader Set!");
    }
}</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion
par programmation.
  1. BeanFactoryAware#setBeanFactory(BeanFactory factory)

      Définissez l'environnement
    • ()
    • Si Bean doit accéder à Variables et attributs d'environnement , cette méthode sera appelée. CAS D'UTILISATION:
    • Utilisé pour accéder dynamiquement à la valeur dans
    .
<code class="language-java">public class MyBean implements BeanFactoryAware {
    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        System.out.println("BeanFactory Set!");
    }
}</code>
Copier après la connexion

  1. Définissez l'analyse de valeur intégrée EnvironmentAware#setEnvironment(Environment environment) (

    )
      • Autorisé Bean Analyse du placement du placement ($ {propriété})
      • .
      • Utilisation: Lorsque le bean a besoin de analysant manuellement l'espace réservé est utile.
<code class="language-java">public class MyBean implements BeanNameAware {
    @Override
    public void setBeanName(String name) {
        System.out.println("Bean Name Set: " + name);
    }
}</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

  1. Définissez le chargeur de ressources () ResourceLoaderAware#setResourceLoader(ResourceLoader loader)

      s'applique uniquement à
    • applicationContext pour les ressources de chargement dynamique.
    • CAS D'UTILISATION:
    • Chargement de fichiers, ressources de chemin de classe ou ressources externes.

    Définissez l'éditeur d'événements d'application
  1. (

    ) ApplicationEventPublisherAware#setApplicationEventPublisher(ApplicationEventPublisher publisher) Si Bean a besoin de

    pour publier un événement
      , cette méthode sera appelée.
    • Cas d'utilisation: Utilisé pour les événements de diffusion, tels que
    • .
    • ContextRefreshedEvent
Définissez la source de message
(
    )
  1. Si Bean a besoin de Internationalisation (I18N) pour soutenir MessageSourceAware#setMessageSource(MessageSource source), le printemps injectera MessageSource.

  2. Définir ApplicationContext
(
)
  1. Si Bean doit accéder à l'ensemble de l'application SpringContext , cette méthode sera appelée. ApplicationContextAware#setApplicationContext(ApplicationContext ctx)

    Exemple:
      Autoriser un accès dynamique à
    • d'autres haricots, paramètres environnementaux, etc. .
    • Définissez le servertContext
    (
  2. )

    uniquement applicable à
  1. applications Web

    , utilisées pour accéder aux informations de contexte Web . ServletContextAware#setServletContext(ServletContext ctx)

    • Le post-procédé avant l'initialisation
    • (
    )

autorisé
    avant le haricot
  1. avant le

    haricot modifié. BeanPostProcessor#postProcessBeforeInitialization()

    • Initialisation personnalisée

  1. Custom Méthode

    Custom

    • InitializingBean afterPropertiesSet()
    • @PostConstruct
    • après le post-traitement initialisé
    • (@Bean) init-method
    Autoriser le bean initialiser
  2. plus tard
Modifier le bean.
<code class="language-java">public class MyBean implements BeanClassLoaderAware {
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("ClassLoader Set!");
    }
}</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion

Exemple:
    Utilisé pour créer des enregistrements de journal, des enregistrements de journal ou une programmation orientée vers le visage (AOP)
  1. .

    BeanPostProcessor#postProcessAfterInitialization()

    • bean disponible
      • Bean a complètement initialisé et peut être utilisé pour les applications .

2. Étape de destruction (haricot fermer le cycle de vie)

Lorsque l'application est fermée, le printemps sera élégant

haricot détruit

.

    Le traitement avant détruit
  1. (

    ) DestructionAwareBeanPostProcessor#postProcessBeforeDestruction() permet de nettoyer avant la destruction

    .
    La méthode
  2. DisposableBean Si Bean est implémenté, destroy() sera appelé.

    • DisposableBean destroy()
    Méthode personnalisée
  3. (méthode préférée)
<code class="language-java">public class MyBean implements BeanNameAware {
    @Override
    public void setBeanName(String name) {
        System.out.println("Bean Name Set: " + name);
    }
}</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion
  1. est plus moderne que , et

    Appelez avant le haricot détruit . @PreDestroy

    • DisposableBean Custom
    • (si défini dans
    )
<code class="language-java">public class MyBean implements BeanClassLoaderAware {
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("ClassLoader Set!");
    }
}</code>
Copier après la connexion
Copier après la connexion
Copier après la connexion
    Définissez la méthode alternative pour nettoyer la logique.
  1. destroy-method @Bean trois, le résumé complet du processus (ordre final)

    • ?
    Définition du bean de charge
bean instancié (
)

()

()

(
    )
  1. (
  2. ) new Bean()
  3. (
  4. ) setBeanName() BeanNameAware (
  5. )
  6. setBeanClassLoader() (BeanClassLoaderAware)
  7. (setBeanFactory()) BeanFactoryAware
  8. (
  9. ) setEnvironment() EnvironmentAware (
  10. )
  11. setEmbeddedValueResolver() (EmbeddedValueResolverAware)
  12. / setResourceLoader() ResourceLoaderAware
  13. (
  14. ) setApplicationEventPublisher() ApplicationEventPublisherAware bean disponible
  15. setMessageSource() MessageSourceAware
  16. ?
  17. setApplicationContext() (ApplicationContextAware)
  18. (setServletContext()) ServletContextAware
  19. postProcessBeforeInitialization() BeanPostProcessor
  20. @PostConstruct Plus d'informations sur Interface et méthodes, veuillez visiter: afterPropertiesSet() https://www.php.cn/link/6759d0996526ddc8e27aa550f0b806b1
  21. postProcessAfterInitialization() Je vous souhaite un codage heureux! ? BeanPostProcessor

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal