Heim > Java > javaLernprogramm > Spring-: Spring-Bean-Lifecycle-Execution-Ordnung

Spring-: Spring-Bean-Lifecycle-Execution-Ordnung

Mary-Kate Olsen
Freigeben: 2025-01-29 18:08:15
Original
593 Leute haben es durchsucht

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

Dieser Artikel analysiert umfassend den Lebenszyklus von Frühlingsbohnen, der alle verwandten Lebenszyklus -Schnittstellen und -Methoden abdeckt, die die Beanfactory -Schnittstelle abdecken, um den Betriebsprozess von Bean vollständig darzustellen.


I. Frühlingsbohnen -Lebenszyklus -Logikausführungsreihenfolge (von Instanziierung bis Zerstörung)

(sofort zur Zerstörung)

    Bean -Definition laden (Metadatenverarbeitung)
  1. Spring aus der Konfigurationsdatei

    (@Configuration), XML -Datei oder Komponentenscan (@component)
      Bean -Definition lesen.
    • Dies ist Metadatenverarbeitungsschritte , es wurde keine Instanz erstellt.
    • verwandte Methode:
    • BeanDefinitionRegistry#registerBeanDefinition()
  2. Bean instanziiert (durch Objekt erstellt)

  1. Erstellen Sie das tatsächliche Bean -Objekt auf folgende Weise:

    Die konstruktive Funktion wird instanziiert

      Fabrikmethode
      • verwandte Methode:
    • Stellen Sie den Bean -Namen InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation() (
    • )
    fest
Wenn Bean implementiert
, ruft die Spring
    Methode auf
  1. den eigenen Namen von Bean

    auf. Dies geschah vor der Injektion BeanNameAware#setBeanName(String name) vor .

      Anwendungsfall:
    • Wenn Bean seinen Namen BeanNameAware im Kontext der Anwendung kennen muss. setBeanName()
    • Legen Sie den Bohnenklassenloader () ein
    • Wenn Bean auf seinen Klassenloader
    zugreifen muss, nennt der Feder diese Methode.
Verwendung:
<code class="language-java">public class MyBean implements BeanNameAware {
    @Override
    public void setBeanName(String name) {
        System.out.println("Bean Name Set: " + name);
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Wenn Bean
die Klasse
    zur Laufzeit dynamisch laden.
  1. BeanClassLoaderAware#setBeanClassLoader(ClassLoader classLoader)

    • Setzen Sie Beanfactory (
    • )
    • Springinjekte Beanfactory in Bean.
    Anwendungsfall:
  2. Bean
andere Bean
<code class="language-java">public class MyBean implements BeanClassLoaderAware {
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("ClassLoader Set!");
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
durch Programmierung abrufen.
  1. BeanFactoryAware#setBeanFactory(BeanFactory factory)

      Stellen Sie die Umgebung
    • () fest
    • Wenn Bean auf Umgebungsvariablen und Attribute zugreifen muss, wird diese Methode aufgerufen. Anwendungsfall:
    • Wird verwendet, um den Wert in
    dynamisch zugänglich zu machen.
<code class="language-java">public class MyBean implements BeanFactoryAware {
    @Override
    public void setBeanFactory(BeanFactory beanFactory) {
        System.out.println("BeanFactory Set!");
    }
}</code>
Nach dem Login kopieren

  1. Setzen Sie den eingebetteten Wert Parser EnvironmentAware#setEnvironment(Environment environment) (

    )
      • erlaubte Bean Analyse der Platzierung der Platzierung ($ {Eigenschaft})
      • .
      • Verwendung: Wenn die Bean die Analyse des Platzhalters manuell analysiert ist.
<code class="language-java">public class MyBean implements BeanNameAware {
    @Override
    public void setBeanName(String name) {
        System.out.println("Bean Name Set: " + name);
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

  1. Legen Sie den Ressourcenload

    () fest ResourceLoaderAware#setResourceLoader(ResourceLoader loader)

    gilt nur für
      applicationContext
    • für dynamische Laderessourcen. Anwendungsfall:
    • Laden von Dateien, Klassenpfadressourcen oder externen Ressourcen.

Legen Sie den Publisher
    (
  1. )

    fest Wenn Bean ApplicationEventPublisherAware#setApplicationEventPublisher(ApplicationEventPublisher publisher) eine Veranstaltung

    veröffentlichen, wird diese Methode aufgerufen.
    • Anwendungsfall: Wird für Rundfunkereignisse wie verwendet.
    • ContextRefreshedEvent
  2. Stellen Sie die Nachrichtenquelle
(
)
    fest
  1. Wenn Bean Internationalisierung (I18N) zur Unterstützung benötigt, wird der Frühling MessageSource injizieren. MessageSourceAware#setMessageSource(MessageSource source)

    setze applicationContext
  2. (
)
  1. Wenn Bean auf

    auf die gesamte Spring ApplicationContext zugreifen muss, wird diese Methode aufgerufen. ApplicationContextAware#setApplicationContext(ApplicationContext ctx) Beispiel:

    Ermöglichen Sie einen dynamischen Zugriff auf
      andere Bohnen, Umgebungseinstellungen usw.
    • .
    • Legen Sie den ServertContext
    • (
    )
  2. fest

nur für
    Webanwendungen
  1. anwendbar, der zum Zugriff auf die

    Web -Kontextinformationen verwendet wird. ServletContextAware#setServletContext(ServletContext ctx)

    • Die Post -Processing vor der Initialisierung (
    • )
erlaubt
vor Bean
    vor der
  1. modifizierten Bean.

    BeanPostProcessor#postProcessBeforeInitialization()

    • Customized Initialisierung

    benutzerdefinierte Methode
  1. benutzerdefiniert

    • InitializingBean afterPropertiesSet()
    • @PostConstruct nach der initialisierten Post -Behandlung
    • (
    • ) @Bean init-method
    • Bean initialisieren
    später
  2. Bean modifizieren.
<code class="language-java">public class MyBean implements BeanClassLoaderAware {
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("ClassLoader Set!");
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Beispiel:
Wird zum Erstellen von Proxy-, Protokolldatensätzen oder mit Gesichtsorientierter Programmierung (AOP)
    verwendet.
  1. BeanPostProcessor#postProcessAfterInitialization()

    • Bean verfügbar
      • Bean hat vollständig initialisiert und kann für Anwendungen verwendet werden.

2. Zerstörungsstufe (Bean schließen den Lebenszyklus)

Wenn die Anwendung geschlossen ist, ist die Feder elegant

zerstört Bean

.

    Die Behandlung vor zerstört
  1. (

    ) DestructionAwareBeanPostProcessor#postProcessBeforeDestruction() Ermöglicht das Aufräumen vor dem Zerstören

    .
    Die
  2. -Methode
  3. DisposableBean Wenn Bean implementiert ist, wird destroy() aufgerufen.

    • DisposableBean destroy()
    benutzerdefinierte
  4. Methode (bevorzugte Methode)
<code class="language-java">public class MyBean implements BeanNameAware {
    @Override
    public void setBeanName(String name) {
        System.out.println("Bean Name Set: " + name);
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  1. ist moderner als und

    rufen Sie vor, bevor Bean zerstört wird. @PreDestroy

    • DisposableBean benutzerdefiniert
    • (wenn in
    )
definiert
<code class="language-java">public class MyBean implements BeanClassLoaderAware {
    @Override
    public void setBeanClassLoader(ClassLoader classLoader) {
        System.out.println("ClassLoader Set!");
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
    Definieren Sie die alternative Methode zur Reinigung der Logik.
  1. destroy-method @Bean Drei, die vollständige Prozessübersicht (endgültige Reihenfolge)

    • ?
    Bean -Definition laden
instanziierte Bean (
)

()

()

(
    )
  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 verfügbar
  15. setMessageSource() MessageSourceAware
  16. ?
  17. setApplicationContext() (ApplicationContextAware)
  18. (setServletContext()) ServletContextAware
  19. postProcessBeforeInitialization() BeanPostProcessor
  20. @PostConstruct Weitere Informationen zu Schnittstelle und Methoden finden Sie unter: afterPropertiesSet() https://www.php.cn/link/6759d0996526ddc8e27aa550f0b806b1
  21. postProcessAfterInitialization() BeanPostProcessor
  22. Ich wünsche Ihnen eine glückliche Codierung! ?

Das obige ist der detaillierte Inhalt vonSpring-: Spring-Bean-Lifecycle-Execution-Ordnung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage