リサーチたBeanFactoryコアコンテナ:春のソースコード解析シリーズ3

ディレクトリ

@(春出典分析シリーズ:コア・コンテナの研究)
知識について明確その後、コンテナを話す前に。

  • BeanDefinitionビーンは、容器の中に記述されています。BeanDefinitionとビーンはものではありません。
  • 豆はBeanDefinitionに従って作成されます。それは我々が対象と呼んでいます。

BeanDefinitionは、豆は、完成品を保管するための場所を必要とし、材料を格納する場所が必要です。今日は倉庫について話しています。

たBeanFactory家族

ここに画像を挿入説明
この図は、デフォルトのコンテナがDefaultListableBeanFactoryは図を達成継承されている。我々は、次の右から左に分析しました。

  1. たBeanFactoryインタフェース:
    容器のトップレベルインターフェース、基本的な機能は豆を得ることを含む、容器を提供し、Beanは単一の実施形態か、豆の種類を取得し、ビーンエイリアスのように含まれています。
  2. ListableBeanFactoryインタフェース:
    たBeanFactoryのサブインタフェースは、ビーンの大部分を取得する能力を持っています
  3. HierarchicalBeanFactoryインタフェース:親コンテナにアクセスする機能。たBeanFactoryのレベルがあります。
  4. AutowireCapableBeanFactoryインタフェース:継承たBeanFactoryは、自動組立能力を拡張します。他のフレームワークとの統合のための大きな役割のために使用されるこのインタフェースは、春には、過去にコンテナ豆Springコンテナのライフサイクル管理に追加されません。このインタフェースは、ほとんど使用されません
  5. ConfigurableBeanFactoryは:たBeanFactoryの設定を定義します。HierarchicalBeanFactory継承とSingletonBeanRegistryインタフェース。コンテナは、このインタフェース、階層、シングルトンBeanDefinition登録機能を実装しています。
  6. ConfigurableListableBeanFactory:
    クラスローダ、変換型、プロパティエディタ、BeanPostProcessor、範囲、定義された豆、豆の処理の依存関係、等豆破壊:大融合インターフェースは、上記インターフェース、さらに含むことに加えて有することができます。

  7. SingletonBeanRegistryインタフェース:豆は例のBeanDefinition異なる登録、クエリ、アクセス番号など、ここに注意を払うためにビーンビーン能力を操作する能力を持ってい...

  8. SimpleAliasRegistry :.ビーン別名クラス動作、達成したAliasRegistryストレージビーン別名、エイリアスは、Beanエイリアス機能特性がビーンエイリアス格納され得る、ビーン登録.aliasMap

  9. 最も重要なの機能を継承するDefaultSingletonBeanRegistry :. SimpleAliasRegistryのほか、ストレージSingletonBeanRegistry Beanインスタンスとインタフェースする能力を達成することである、豆は、豆が私たちの定義、例のオブジェクトクラスクラス春管理のインスタンス間で取得登録。これらの相互依存関係はDefaultListableBeanFactoryのデフォルトの関連容量ビーン共通のコンテナに格納されている。このように達成するための間接的な継承によってです。
    /** Disposable bean instances: bean name --> disposable instance */
    private final Map<String, Object> disposableBeans = new LinkedHashMap<String, Object>();

    /** Map between containing bean names: bean name --> Set of bean names that the bean contains */
    private final Map<String, Set<String>> containedBeanMap = new ConcurrentHashMap<String, Set<String>>(16);

    /** Map between dependent bean names: bean name --> Set of dependent bean names */
    private final Map<String, Set<String>> dependentBeanMap = new ConcurrentHashMap<String, Set<String>>(64);

    /** Map between depending bean names: bean name --> Set of bean names for the bean's dependencies */
    private final Map<String, Set<String>> dependenciesForBeanMap = new ConcurrentHashMap<String, Set<String>>(64)
  1. FactoryBeanRegistrySupport:豆は、私が見ることができ、その名前によって、マルチプラントのサポート.FactoryBeanを提供ビーンのビーンの製造です。
  2. AbstractBeanFactory抽象クラス:ネクサス .AbstractBeanFactoryビーンコンテナがビーンテンプレートモードを取得定義し、我々は、継承によってAbstractBeanFactory参照図から、後継FactoryBeanRegistrySupport機能とインターフェイスの右の部分を達成するためには、すでに比較的完全である.....アルゴリズム骨格、
  3. AbstractAutowireCapableBeanFactory :.ほとんどがdoCreateBeanロジックはBeanDefinition豆プロセスになることで、テンプレートメソッドAbstractBeanFactory定義されたメソッドを実装する能力を持っている... この方法は非常に重要であり、我々は通常、直接BeanDefinition春から新しいオブジェクトを作成するためにクラスを使用して...豆は、拡張ポイントの多くを残して、テンプレート処理する。BeanDefitionは異なる時間に豆を作成するプロセスをカスタマイズするために、ユーザーに任さ。
  4. DefaultListableBeanFactory共通のデフォルトコンテナを達成するため、コンテナクラスでも最も一般的に使用されるばねである。DefaultListableBeanFactoryはBeanDefinitionRegistryインタフェースを実現し、左を見てください。これは何を意味するのでしょうか?ストレージとBeanDefinition記述DefaultListableBeanFactoryを、継承によって.DefaultListableBeanFactoryのBeanDefinitionを操作する能力はまた、豆の記憶動作を持っています機能。

要約

  1. たBeanFactoryシステムは、インタフェースがクリアされて、完全にインターフェイスの分離の原則を体現しています。
  2. たBeanFactoryストレージシステムは、一方がBeanDefinitionストレージであり、他方はビーンストアである二つがあります。
  3. DefaultListableBeanFactoryは、最も一般的に使用されるコンテナクラスとして。機能BeanDefinitionストア事業を展開していないだけでなく、相続ビーンストア・オペレーション機能により持ってDefaultListableBeanFactory保存BeanDefinitionビーンが作成され、特定のアルゴリズムによって格納します

BeanDefinition、たBeanFactory、ビーン間の関係

私たちは、各インターフェイス、上記のクラスを理解することによって彼らの関係を見てください。

私たちは、たBeanFactoryコンテナを注入するBeanDefinition。たBeanFactoryは、我々は.BeanFactoryはBeanDefinition Beanを作成するために私たちを助けたときに豆を取得したいとき、私たちを助けるために保存された。そして、キャッシュされた。作成プロセスは参加型です

  • たBeanFactoryはBeanDefinitonと豆を救いました。
  • BeanDefinitionを作成するための機能を使用したビーンたBeanFactory
  • たBeanFactoryは、ユーザーがBeanDefinition介入ビーンの機能を生成することができます。

たBeanFactoryでの拡張ポイント

開閉の設計原理の原理は、特に良好な言った:ソフトウェアエンティティが変更を拡張することによって達成されるべきであること。
多くの優れたフレームワークの拡張ポイントは、列として、同様の設計を有します。

  • フィルターでのTomcat
  • pipline弁のTomcatで
  • インターセプタをspringmvc

BeanDefinitionからビーンへたBeanFactoryを一度に実行されませんでした。まさにプロセスで拡張ポイントを残す。ビーンにBeanDefinitionカスタムプロセスの変化の多様性を達成するために.springプロセスがあります。

我々以上から知っている:AbstractAutowireCapableBeanFactoryをdoCreateBean()メソッドがあり、我々はこの方法で拡張ポイントを見てビーン次を作成することBeanDefinitionです..:

  1. xxxAwareインタフェース:列を達成するように豆を得ることができるxxxのBeanFactoryAwareインタフェースクラスがビーンにロードされた時に豆をロードしたBeanFactoryに取得することができます。
  2. BeanPostProcessor:前及び初期化方法の実行後に、それぞれ、2で定義されたBeanPostProcessorインターフェース方法は、(InitializingBeanインターフェースまたは定義されたINIT-方法)Beanを行います
  3. InitializingBeanインタフェース:InitializingBeanクラスのインターフェイスを実装し、afterPropertiesSetを行います
  4. カスタムのinit-法法:

要約:

たBeanFactory材料と完成品倉庫であり、生産ラインで、生産はBeanDefinition豆を要しました。開発者は、BeanのにBeanDefinitionを作成するプロセスに参加することができます容易にするため、拡張ポイントの多くを残したBeanFactory。

私は公共の行動のみんなの注目番号[ソース]、最新の個人的な理解タイムリーなプロモーションを歓迎します。
ここに画像を挿入説明

おすすめ

転載: www.cnblogs.com/smallstudent/p/11641173.html