SpringBeanFactoryとFactoryBeanの違い

一緒に書く習慣をつけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して4日目です。クリックしてイベントの詳細をご覧ください

高い塔の上に公共の射撃ハヤブサがあり、それを手に入れることに不利な点はありません。

序文

SpringIOC非常に重要な概念であり、その本質はマップ構造、ストレージコンテナ、およびビジネスBean情報です。ただしBeanFactoryFactoryBeanとの違いは非常に重要な知識ポイントです。この記事では、ソースコードを分析して説明します。

違いとつながり

BeanFactory

Springでは、すべてが(つまり、IOCコンテナ)Beanによって管理されます。コンテナの基本的な形式が定義され、IOCコンテナの基本的なインターフェイスとライフサイクルが指定されます。また、、、、および追加の関数を追加するインターフェイスなど、 BeanFactoryの多くの実装クラスがあります。作成されたオブジェクトは、次のライフサイクル形式に従う必要があり、反射メカニズムによって生成が実現されます。BeanFactoryBeanFactoryApplicationContextDefaultListableBeanFactoryXmlBeanFactoryBeanFactoryBeanBean

英語では、それは意識を意味します。ライフサイクルプロセスには多くのインターフェースが含まれているAwareことがわかります。BeanFactoryAware

BeanFactoryの実装

以下は、プロジェクト開発で広く使用されているBeanFactoryインターフェースApplicationContextAwareですInitializingBeanDisposableBean

BeanNameAware.setBeanName 用于设置 Bean 的名称
BeanClassLoaderAware.setBeanClassLoader 设置类加载器
BeanFactoryAware.setBeanFactory 设置 bean 工厂
ResourceLoaderAware.setResourceLoader 设置资源加载器
ApplicationEventPublisherAware.setApplicationEventPublisher 设置事件发布器
MessageSourceAware.setMessageSource 设置信息资源
ApplicationContextAware.setApplicationContext 设置应用上下文
ServletContextAware.setServletContext 设置 Servlet 上下文
BeanPostProcessor.postProcessBeforeInitialization 前置处理器
InitializingBean.afterPropertiesSet Bean 初始化操作
RootBeanDefinition.getInitMethodName 设置Bean 的初始化方法名称
BeanPostProcessor.postProcessAfterInitialization 后置处理器
DisposableBean.destroy 设置 Bean 销毁
RootBeanDefinition.getDestroyMethodName 获取 Bean 销毁的方法
复制代码

デフォルトでは、getBeanメソッドを直接呼び出すと、工場で作成されたオブジェクトが返されます。Bean自体を取得する場合は、処理のプレフィックスとして&記号を追加する必要があります。

FactoryBean

ただし、場合によってはBeanインスタンス化操作が非常に複雑になり、要件に応じて多数のプロパティを構成する必要があります。現時点では、ライフサイクルの流れに従わずにオブジェクトを構築する必要がBeanあるという構成の柔軟性があり。 それ自体が多くの実装を、インスタンス化の一連の複雑な詳細を隠し、上位層のアプリケーションに利便性をもたらします。Srping 3.0はジェネリックスのサポートを開始したため、つまり、インターフェイス宣言がの形式に変更されました。のアプリケーションでは、これは良い習慣です。データベースを操作するプロセスでは、を作成するためFactoryBeanBeanBeanSpringFactoryBeanFactoryBeanFactoryBean<T>FactoryBeanSqlSessionFactoryBeanSqlSessionFactory

要約する

BeanFactoryBeanのファクトリインターフェイスを生成および管理できるSpringIOCコンテナ仕様を提供します。ただし、これFactoryBeanはBean作成の特別な方法であり、IOCコンテナーの仕様に従う必要はありませんが、Beanの拡張です。複雑なBeanオブジェクトの作成と使用の場合、オブジェクトの作成の詳細をカプセル化できます。

おすすめ

転載: juejin.im/post/7082620724443086855