[春]Beanライフサイクルソースコード分析の概要

[春]Beanライフサイクルソースコードの概要

画像-20220403143637972

1.ケースの検証

2つのBeanA、Bを定義し、MyBeanFactoryProcess、MyBeanProcessor、MyInstantiationAwareBeanPostProcessorsの3つの拡張ポイントを実装します。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

 <bean id="a" class="com.sgg.bean.A" init-method="init"/>
 <bean id="b" class="com.sgg.bean.B"/>

 <bean id="myBeanFactoryProcess" class="com.sgg.process.MyBeanFactoryProcess"/>
 <bean id="myBeanProcessor" class="com.sgg.process.MyBeanProcessor"/>
 <bean id="myInstantiationAwareBeanPostProcessors" class="com.sgg.process.MyInstantiationAwareBeanPostProcessors"/>



</beans>

A

画像-20220403144206176

B

画像-20220403144218921

MyBeanFactoryProcess

画像-20220403144253316

`MyBeanProcessor

画像-20220403144308958

MyInstantiationAwareBeanPostProcessors

画像-20220403144325799

出力結果

画像-20220403143801713

2.まとめ

2.1 BeanFactoryPostProcessor

bdを解析して生成するBeanファクトリを作成した後、BeanFactoryPostProcessorを実装し、開始されたBeanの定義情報を変更することで、Beanファクトリオブジェクトを取得できます。

2.2 InstantiationAwareBeanPostProcessor

Beanをインスタンス化する前に、InstantiationAwareBeanPostProcessorを実装し、postProcessBeforeInitializationメソッドを書き直して、オブジェクトをコンテナーに追加し、現在のBeanのインスタンス化を終了することができます。

Beanをインスタンス化した後、InstantiationAwareBeanPostProcessorを実装し、postProcessAfterInstantiationメソッドを書き直してtrueまたはfalseを返し、属性の入力を実行するかどうかを決定できます。

2.3 BeanPostProcessor

Beanを初期化する前に、BeanPostProcessorを実装してpostProcessBeforeInitializationメソッドを書き直し、現在のbeanNameに対応するBeanを変更できます。

Beanを初期化した後、BeanPostProcessorを実装して、postProcessAfterInitializationメソッドを書き直し、初期化後にBeanオブジェクトを取得できます。

おすすめ

転載: blog.csdn.net/JAVAlife2021/article/details/123937456