記事のディレクトリ
このブログのデモ元アドレス
https://github.com/suchahaerkang/spring-annotation.git
1 BeanPostProcessorの使用
BeanPostProcessorスプリングがインタフェースで提供され、インタフェースは、前、すべてのコンポーネントを初期化し、いくつかの処理の後、それぞれ、2つのデフォルトの方法を提供します
ソースコードは、これらの2つのメソッドの実装のタイミング解析を見て
ここで我々は、カスタムコンポーネントの実装インタフェースBeanPostProcessorを持っているまず、それをテストするためのコードを使用し
/**
* @description:
* @author: sukang
* @date: 2020-03-06 12:27
*/
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
//组件创建并属性赋值之后,初始化函数执行之前执行这个方法
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization方法执行...");
return bean;
}
//组件创建并属性赋值之后,初始化函数执行之后执行这个方法
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization方法执行...");
return bean;
}
}
書き込みテストケース
//测试BeanPostProcessor
@Test
public void test3(){
//创建容器
System.out.println("IOC容器创建...");
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
}
業績
の原則2 BeanPostProcessor
ここでは、BeanPostProcessorの原理を分析するために、ソースコードを見て
割り当てと初期化、犬コンポーネントの作成を分析するために、ソースコードを見て、
単純な原則をまとめたソースコードが読み取り、擬似コードされているBeanPostProcessor
//组件创建之后,对组件进行属性赋值,
populateBean()
initializeBean(){
//遍历容器中的所有BeanPostProcessor,调用他们的postProcessBeforeInitialization()方法
applyBeanPostProcessorsBeforeInitialization()
//初始化组件
invokeInitMethods()
//遍历容器中的所有BeanPostProcessor,调用他们的postProcessAfterInitialization()方法
applyBeanPostProcessorsAfterInitialization()
}
3スプリングBeanPostProcessorを達成するために、構成要素の数を提供します
ここでApplicationContextAwareProcessorで簡単に見ては、このコンポーネントの
コンポーネントは、我々は上記のsetApplicationContext()メソッドApplicationContextAwareインターフェイスコンポーネント犬の基礎を実現するには、このメソッドはコンポーネントをもたらすために、パラメータなどのコンポーネントの初期化犬と犬のApplicationContextコンテナの前に呼び出されますかもしれない犬ApplicationContextのコンテナを使用。
効果ApplicationContextAwareProcessorこのコンポーネントは、我々はこのソースのコンポーネントを見ているため、コンテナは、コンポーネントの初期化が達成される前にそれを持って来ることができました
豆のライフサイクルの概要の4つのペア
- 豆のライフサイクル:作成 - 初期化 - 破壊
- @Beanによって初期化および破壊方法をカスタマイズする(にinitMethod = "INIT"、destroyMethodを= "破壊")
- InitializingBean&DisposableBeanことで&PostConstruct&PreDestroy @ @も初期化や破壊方法をカスタマイズすることができます
- そして最後にBeanPostProcessorの原理を使用することを学んだ、私は、このアセンブリソースコードの春に考える非常に重要であり、あなたが知って取得する必要があります