Heim >Java >javaLernprogramm >Spring-: Ganzfleck-Bohnen-LIFECYCLE-FROM-Registrierung zu Zerstörung mit Sample-Beispiele

Spring-: Ganzfleck-Bohnen-LIFECYCLE-FROM-Registrierung zu Zerstörung mit Sample-Beispiele

DDD
DDDOriginal
2025-01-29 20:14:101010Durchsuche

spring-: entire-spring-bean-lifecycle-from-registration-to-destruction-with-sample-examples

Dieser Leitfaden bietet eine umfassende Exemplar des Lebenszyklus des Frühlingsbohnens und demonstriert jede Stufe mit praktischen Beispielen. Wir werden die Lebenszyklus -Methoden von Spring nacheinander untersuchen und ein solides Verständnis dafür aufbauen, wie der Frühling seine Bohnen von der Registrierung bis zur Zerstörung verwaltet.

Schritt 1: Bean -Definition Registrierung (registerBeanDefinition())

Wir beginnen mit der Untersuchung, wie Frühlingsbean -Definitionen vor Instanziation, Nutzung BeanDefinitionRegistry.

Was passiert: Federlasten und registriert Bean -Definitionen aus verschiedenen Quellen: @ComponentScan, @Bean Methoden in @Configuration Klassen und XML -Konfiguration (falls verwendet). Entscheidend ist, dass an diesem Punkt keine Bohnen instanziiert werden . Spring speichert einfach Metadaten über jede Bohne.

Praktisches Beispiel: manuell eine Bean mit einem BeanDefinitionRegistryPostProcessor.

manuell registrieren
<code class="language-java">@Configuration
public class CustomBeanRegistrar implements BeanDefinitionRegistryPostProcessor {

    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
        beanDefinition.setBeanClass(MyDynamicBean.class);
        registry.registerBeanDefinition("myDynamicBean", beanDefinition);
        System.out.println("Custom bean definition registered: MyDynamicBean");
    }

    // ... (rest of the code remains the same)
}</code>

Key Takeaway: Dynamische Bean -Registrierung (z. B. basierend auf Bedingungen oder externen Konfigurationen) wird durch diese Methode erreicht. Bohnen sind in dieser Phase im Wesentlichen Blaupausen. Verwenden Sie diese Methode sparsam, nur wenn eine dynamische Registrierung wirklich erforderlich ist.

Schritt 2: Vor der Instanziierung (postProcessBeforeInstantiation())

Als nächstes untersuchen wir InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation().

Was passiert: Diese Methode führt vor vor der Instanziierung einer Bean aus. Es ermöglicht eine Änderung oder den Austausch der Bean -Instanz vor Erstellung oder sogar die Verhinderung der Standard -Instanziierung durch Rückgabe eines Proxy- oder benutzerdefinierten Objekts.

Praktisches Beispiel: Bean -Instanziierung für Protokollierungszwecke abfangen.

<code class="language-java">@Component
class CustomInstantiationAwareBeanPostProcessor implements InstantiationAwareBeanPostProcessor {
    @Override
    public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
        System.out.println("Before instantiating bean: " + beanName);
        return null; // Allows normal instantiation
    }
}</code>

Schlüsselbeobachtung: Diese Methode wird vor der Konstruktor ausgeführt. Es ist wertvoll für AOP -Szenarien (Erstellen von Proxys).

Schritt 3: Bean -Namensbewusstsein (setBeanName())

Nach der Instanziierung ruft Frühjahr BeanNameAware#setBeanName().

auf

Was passiert: Die Bean wird im Anwendungskontext auf ihren eigenen Namen aufmerksam. Dies geschieht vor Abhängigkeitsinjektion.

Praktisches Beispiel: Eine Bean, die ihren eigenen Namen erkennt.

<code class="language-java">class MyDynamicBean implements BeanNameAware {
    private String beanName;

    // ... (constructor and other methods)

    @Override
    public void setBeanName(String name) {
        this.beanName = name;
        System.out.println("Bean name set: " + name);
    }
}</code>

Schlüsselbeobachtung: Diese Methode wird unmittelbar nach der Instantiation aufgerufen. Die Bohne kann ihren Namen für die spätere Verwendung speichern (z. B. Protokollierung oder interne Manipulation).

Schritte 4-12: Weitere Lebenszyklusmethoden

Die verbleibenden Lebenszyklusmethoden (BeanClassLoaderAware, BeanFactoryAware, EnvironmentAware, EmbeddedValueResolverAware, ResourceLoaderAware, ApplicationEventPublisherAware, MessageSourceAware und ApplicationContextAware) Folgen Setzermethode, die der Bean Zugang zu einer entscheidenden Federkomponente verleiht. Diese werden im Originaldokument beschrieben und folgen der gleichen Struktur von "Was passiert", "praktisches Beispiel" und "Schlüsselbeobachtung". Sie ermöglichen den Zugriff auf den Klassenloader, den Bean Factory, die Umgebungseigenschaften, den eingebetteten Wert Resolver, den Ressourcenloader, den Ereignisverlag, die Nachrichtenquelle bzw. der Anwendungskontext.

Schritt 13: Vor der Initialisierung (postProcessBeforeInitialization())

BeanPostProcessor#postProcessBeforeInitialization() wird vor Initialisierungsrückrufe als bezeichnet (@PostConstruct, InitializingBean#afterPropertiesSet()).

Was passiert: Ermöglicht die Änderung von Beaneigenschaften oder die Anwendung von Aspekten (Proxying, Validierung, Protokollierung), bevor die Bean vollständig initialisiert ist.

Praktisches Beispiel: Vor der Initialisierung eine Bean ändern.

<code class="language-java">@Configuration
public class CustomBeanRegistrar implements BeanDefinitionRegistryPostProcessor {

    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
        beanDefinition.setBeanClass(MyDynamicBean.class);
        registry.registerBeanDefinition("myDynamicBean", beanDefinition);
        System.out.println("Custom bean definition registered: MyDynamicBean");
    }

    // ... (rest of the code remains the same)
}</code>

Schlüsselbeobachtung: Diese Methode wird vor den Initialisierungs -Rückrufbacks ausgeführt.

Schritt 14: Initialisierungs -Rückrufe (@PostConstruct, afterPropertiesSet())

Spring ruft nach postProcessBeforeInitialization().

Initialisierungs -Rückrufe auf

Was passiert: @PostConstruct (Annotationsbasierte) und InitializingBean#afterPropertiesSet() (Schnittstellenbasierte) werden zur Validierung, zur Ressourceneinrichtung oder für die Initialisierung nach der Abhängigkeit verwendet.

Praktisches Beispiel: Verwenden Sie sowohl @PostConstruct als auch afterPropertiesSet().

<code class="language-java">@Component
class CustomInstantiationAwareBeanPostProcessor implements InstantiationAwareBeanPostProcessor {
    @Override
    public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
        System.out.println("Before instantiating bean: " + beanName);
        return null; // Allows normal instantiation
    }
}</code>

Schlüsselbeobachtung: @PostConstruct läuft vor afterPropertiesSet(). Favor @PostConstruct über die Implementierung InitializingBean, es sei denn, es ist ausschließlich erforderlich.

Schritt 15: Nach der Initialisierung (postProcessAfterInitialization())

BeanPostProcessor#postProcessAfterInitialization() führt nach Initialisierungsrückrufe aus.

Was passiert: Ermöglicht das Anwenden von Proxys oder die Durchführung endgültiger Modifikationen nach der vollständigen Bean -Initialisierung.

Praktisches Beispiel: Änderungen nach der Initialisierung anwenden.

<code class="language-java">class MyDynamicBean implements BeanNameAware {
    private String beanName;

    // ... (constructor and other methods)

    @Override
    public void setBeanName(String name) {
        this.beanName = name;
        System.out.println("Bean name set: " + name);
    }
}</code>

Schlüsselbeobachtung: Diese Methode wird nach Initialisierungsrückrufe aufgerufen.

Schritt 16: Zerstörungsaufrufe (@PreDestroy, destroy())

Schließlich werden Zerstörungsaufrufe vor dem Abschalten der Anwendung aufgerufen.

Was passiert: @PreDestroy (Annotationsbasiert) und DisposableBean#destroy() (Schnittstellenbasierte) Stellen Sie sicher

Praktisches Beispiel: Ressourcen aufräumen.

<code class="language-java">@Configuration
public class CustomBeanRegistrar implements BeanDefinitionRegistryPostProcessor {

    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
        GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
        beanDefinition.setBeanClass(MyDynamicBean.class);
        registry.registerBeanDefinition("myDynamicBean", beanDefinition);
        System.out.println("Custom bean definition registered: MyDynamicBean");
    }

    // ... (rest of the code remains the same)
}</code>

Schlüsselbeobachtung: läuft vor @PreDestroy. Bevorzugen destroy(), es sei denn, die Funktionalität von @PreDestroy benötigt. DisposableBean

Dieser umfassende Überblick beschreibt den Lebenszyklus des Spring Bean, sodass Entwickler die Lebenszyklus-Management-Funktionen von Spring effektiv für robuste und gut verwaltete Anwendungen nutzen können.

Das obige ist der detaillierte Inhalt vonSpring-: Ganzfleck-Bohnen-LIFECYCLE-FROM-Registrierung zu Zerstörung mit Sample-Beispiele. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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