ホームページ >Java >&#&チュートリアル >Spring-:登録から登録からサンプルの概要までの全ぶらぶらのように

Spring-:登録から登録からサンプルの概要までの全ぶらぶらのように

DDD
DDDオリジナル
2025-01-29 20:14:10941ブラウズ

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

このガイドは、春の豆のライフサイクルの包括的なウォークスルーを提供し、実用的な例で各段階を示します。 Springのライフサイクル方法を順番に探索し、Springが登録から破壊までの豆をどのように管理するかについての堅牢な理解を構築します。

ステップ1:BEAN定義登録(

registerBeanDefinition() springが

インスタンス化の前にbeanの定義をどのように登録するかを調べることから始めます。 何が起こるか:

さまざまなソースからのスプリングロードとレジスタの定義:BeanDefinitionRegistryクラス内のメソッド、およびXML構成(使用する場合)。 重要なことに、

この時点で豆はインスタンス化されていません。 スプリングは、単に各豆についてメタデータを保存します。

実用的な例:@ComponentScan@Bean @Configuration キーテイクアウト:

ダイナミックビーン登録(たとえば、条件または外部構成に基づく)は、この方法を通じて達成されます。 この段階では、豆は本質的に青写真です。 この方法は、動的登録が本当に必要な場合にのみ、控えめに使用します。

ステップ2:インスタンス化の前( BeanDefinitionRegistryPostProcessor次に、

<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>
を探ります

何が起こるのか:このメソッドは、

beanのインスタンス化の前に実行されます。 これにより、

作成の前にBeanインスタンスの変更または交換が可能になり、プロキシまたはカスタムオブジェクトを返すことにより、標準インスタンス化の防止さえ可能になります。 postProcessBeforeInstantiation()

実用的な例:

ロギング目的のための豆のインスタンス化の傍受。InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation()

キー観察:このメソッドは、前にを実行します。コンストラクターは呼び出されます。 AOPシナリオ(プロキシの作成)にとって価値があります ステップ3:Bean Name Awareness( インスタンス化後、春の呼び出し

何が起こるか:

豆は、アプリケーションコンテキスト内の独自の名前を認識します。これは、依存関係の注入の前に
<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>
>

に発生します 実用的な例:自分の名前を認識している豆。

setBeanName()重要な観察:

この方法は、直立後に呼ばれます。 Beanは、後で使用するためにその名前を保存できます(例:ロギングや内部操作)。

ステップ4-12:さらなるライフサイクル方法

残りのライフサイクル方法(BeanClassLoaderAwareBeanFactoryAwareEnvironmentAwareEmbeddedValueResolverAwareResourceLoaderAwareApplicationEventPublisherAwareMessageSourceAwareApplicationContextAware、および

)も同様のパターンに従います。セッターメソッド。重要なスプリングコンポーネントへのアクセスを豆に提供します。 これらは元のドキュメントで詳細に詳述されており、「何が起こるか」、「実用的な例」、「重要な観察」と同じ構造に従います。 クラスローダー、ビーンファクトリー、環境プロパティ、組み込み価値リゾルバー、リソースローダー、イベントパブリッシャー、メッセージソース、アプリケーションコンテキストへのアクセスを許可します。

ステップ13:初期化の前(postProcessBeforeInitialization()

BeanPostProcessor#postProcessBeforeInitialization()は、初期化のコールバック(@PostConstructInitializingBean#afterPropertiesSet()何が起こるか:

豆が完全に初期化される前に、豆の特性またはアスペクトの適用(プロキシ、検証、ロギング)の適用を許可します。

実用的な例:初期化前に豆を変更します。

重要な観察:

このメソッドは、初期化コールバックの前に実行されます
<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>
ステップ14:初期化コールバック(

@PostConstruct何が起こるか:afterPropertiesSet()

(アノテーションベース)および

(インターフェイスベース)は、検証、リソースのセットアップ、または依存後の注入の初期化に使用されます。 postProcessBeforeInitialization()

実用的な例:

@PostConstructInitializingBean#afterPropertiesSet()重要な観察:

の前に実行されます。 厳密に必要な場合を除き、を実装することよりも@PostConstruct afterPropertiesSet()ステップ15:初期化後(

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

@PostConstruct初期化コールバック後に実行されます。afterPropertiesSet() @PostConstructInitializingBean何が起こるか:

プロキシを適用したり、完全なBeanの初期化後に最終的な変更を実行したりすることができます。

postProcessAfterInitialization()実用的な例:

元の直立化の修正を適用します。

BeanPostProcessor#postProcessAfterInitialization() キー観察:

このメソッドは、初期化コールバック後に呼び出されます

ステップ16:破壊コールバック(@PreDestroydestroy()

最後に、アプリケーションのシャットダウン前に破壊コールバックが呼び出されます

何が起こるのか:(アノテーションベース)および@PreDestroy(インターフェイスベース)適切なリソースのクリーンアップを確保します。 DisposableBean#destroy()

実用的な例:

リソースのクリーンアップ。

<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>
重要な観察:

の前に実行されます。 @PreDestroyの機能を必要としない限りdestroy()を好みます。@PreDestroy DisposableBeanこの包括的な概要は、Spring Beanライフサイクルの詳細を示しており、開発者が堅牢で適切に管理されたアプリケーションのためにSpringのライフサイクル管理機能を効果的に利用できるようにします。

以上がSpring-:登録から登録からサンプルの概要までの全ぶらぶらのようにの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。