[春]Beanライフサイクルソースコードの概要
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
B
MyBeanFactoryProcess
`MyBeanProcessor
MyInstantiationAwareBeanPostProcessors
出力結果
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オブジェクトを取得できます。