BeanFactoryとFactoryBeanの違いと機能

序文

この質問は春のインタビューでよく聞かれるので、この記事で整理します!

違い、効果

BeanFactory:

  1. BeanFactoryもファクトリです。SpringのBeanは、FactoryBeanによって実装されるような特別なBeanを除いて、すべてBeanFactoryによって生成および管理されます。
  2. BeanFactoryは、IOCコンテナーを実装するコア・インターフェースであり、その役割には、アプリケーション内のオブジェクトのインスタンス化、検索、構成、およびこれらのオブジェクト間の依存関係の確立が含まれます。
  3. BeanFactoryは、IOCコンテナーの最も基本的な形式を提供するインターフェースです。これは、IOCコンテナーの特定の実装ではなく、IOCコンテナー仕様のSpring実装を提供することです。これは、DefaultListableBeanFactory、XmlBeanFactory、ApplicationContextなどの特定の実装であり、XmlBeanFactoryが一般的に使用されます。 1つは、この実装です。アプリケーションを構成するオブジェクトとオブジェクト間の依存関係は、XMLで記述されます。XmlBeanFactoryクラスは、このXML構成メタデータを保持し、それを使用して完全に構成可能なシステムまたはアプリケーションを構築します。実現関係は以下のとおりです!
    ここに画像の説明を挿入
    ここに画像の説明を挿入
  4. BeanFacotryは、春の比較的原始的なファクトリーです。たとえば、XMLBeanFactoryは典型的なBeanFactoryです。
    元のBeanFactoryは、AOP関数、Webアプリケーションなど、多くのSpringプラグインをサポートできません。BeanFactoryインターフェースから派生したApplicationContextインターフェース、ApplicationContextにはBeanFactoryのすべての関数が含まれており、通常はBeanFactoryよりも優先することをお勧めします。

FactoryBean:

FactoryBeanはインターフェースでありBeanです。このBeanは単純なBeanではなく、オブジェクトを生成または変更できるファクトリBeanです。FactoryBeanの実装は、デザインモードのファクトリモードおよびモディファイアモードに似ています。一般に、Springパスリフレクションメカニズムは、xml内のBeanのclass属性を使用して、Beanをインスタンス化する実装クラスを指定します。場合によっては、Beanをインスタンス化するプロセスがより複雑になります。従来の方法に従う場合は、多くの情報を提供する必要があります。 xmlのBeanの構成情報の一覧。構成メソッドの柔軟性は制限されています。IOCコンテナーがBeanを実装するためのより柔軟な方法を提供します。コーディングメソッドを使用すると、単純なソリューションが得られる場合があります。つまり、FactoryBeanはBeanFactoryプロセス仕様に従う代わりにBeanを提供します。 IOCコンテナの基礎。単純なエンジニアリングモードとコスチュームモードの追加を実現するには、FactoryBeanインターフェイスを実装した後にgetObjectメソッドを書き直して、カスタムBeanを返すだけです。一部の複雑なBeanのインスタンス化の詳細は非表示になっているため、上位レベルのアプリケーションに便利です。Spring 3.0以降、FactoryBeanはジェネリックスのサポートを開始しました。つまり、インターフェイス宣言がFactoryBeanの形式に変更され、isSingletonメソッドの戻り値によって、FactoryBeanの現在の実装によって返されるオブジェクトがシングルトンに格納されるかどうかが決まります。プール、これは第1レベルのキャッシュです!

@Component
public class MyFactoryBean implements FactoryBean {
    
    

    @Override
    public Object getObject() throws Exception {
    
    
        A testMain = new A();
        System.out.println("----------一系列而外的定制操作-----------");
        //以直接通过getObject方法来完成定制化的Bran,无需使用BeanFactory一步一步按流程生成!
        return testMain;
    }

    @Override
    public Class<?> getObjectType() {
    
    
        return A.class;
    }

    @Override
    public boolean isSingleton() {
    
    
        return true;
    }
}

おすすめ

転載: blog.csdn.net/CSDN877425287/article/details/114096631