Spring-Beanの概要とインスタンス化

メモ

SpringBootの開発は今より人気がありますが、多くの開発者はSpringBootがSpringから派生したサブプロジェクトであることを無視し、SpringBootでSpringがどのように機能するかを理解していません。数日間のトレーニングと記事でSpringBootで遊ぶことは可能ですか?答えは間違いなく良くありません。Springbootを深く理解するには、Springを知っている必要があります。基盤は非常に重要です。重要なことは何も言わないでください。著者の基本的な記事とSpringの概念的な理解も非常に重要な目的です。後でソースコードの分析を準備するために、一度にソースコードにアクセスすると、多くの人がそれに巻き込まれて真実を知らないと思うので、テクノロジーを改善する唯一の方法は正直に学ぶことです。興味のある開発者や学生は私のspingコラムをフォローできます。

2つの豆の紹介

前回の記事ではすでにBeansパッケージとコアの概念について説明しているため、ここでは繰り返しません。Spring IOCコンテナは、1つ以上のBeanを収容できます。Beanは、構成メタデータを提供して作成されます。構成メタデータは、以前の記事でも説明されています。元の構成メソッドはxmlです。

これらのBean定義は、実際にはBeanDefinition Objec t に対応しています次のソースコードは文です。BeanDefinition(インターフェース)はBeanのインスタンスであり、属性値、構築パラメーター値、およびより詳細な情報を持ち、これらは特定の実装者によって提供されます。

BeanDefinitionは、プロパティ値、コンストラクター引数値、
および
具体的な実装によって提供される詳細情報を持つBeanインスタンスを記述します

BeanDefinitionのメタデータの例:

  1. Bean宣言サイクルとスコープ(スコープ、ライフサイクルコールバック)
  2. パッケージ修飾クラス名:通常は実際のクラスの完全なクラス名
  3. 直接の相互コラボレーションはコンテナに依存します。
  4. Beanを使用して接続プールを管理したり、接続プールのサイズを制限したりするなど、オブジェクトの作成時に他の情報を構成します。

メタデータは通常、属性に変換されます

  1. クラス(完全なBean名)
  2. 名前(Beanの名前)
  3. スコープ
  4. コンストラクター引数
  5. プロパティ
  6. 自動配線モード(自動構成モード)
  7. 遅延初期化モード
  8. 初期化メソッド(bean初期化メソッド)
  9. 破壊法(豆破壊法)

さらに、RegisterSingletonメソッドを介してメタデータを構成し、ApplicationContextインプリメンターを介してregisterBeanDefinitionメソッドを構成することもできます(GetBeanFactory()を使用してDefaultListableBeanFactoryを取得するなど)。ただし、このメソッドは一般的ではなく、通常はXMLを使用します。

3つの豆の命名

通常、各Beanには、Beanエイリアスなどを使用して1つ以上のIDがありますが、Beanを管理する場合、コンテナには一意のIDが必要です。メタデータは通常、XMLに基づいて構成され<bean>、要素のidおよびname属性は通常、Beanの一意の識別子を表します。命名規則は、こぶの使用などの小文字または数字の後の最初の文字ですuserDaouserService通常、Beanの名前を指定しないことも可能です。Springコンテナは、Beanの一意の識別子を自動的に生成します。ただし、名前でBeanを参照する場合は、ref要素またはService Locatorスタイルのルックアップを使用して名前を見つける必要があります。

4つのエイリアス

エイリアスは通常、大きなプロジェクトで使用されます。たとえば、メインシステムとサブシステムが統合されている場合、Beanは同じコンテナでfromNameと呼ばれ、エイリアスはtoNameを指します。

<alias name="fromName" alias="toName"/>

5つの豆のインスタンス化

Beanをインスタンス化するには、実際には3つの方法があります。最初の方法は、Bean要素を直接使用することです。コンテナが初期化された後、Beanインスタンスを直接取得できます。これは通常の新しいオブジェクトと同じですが、デフォルトではコンテナBeanインスタンス変換後の例は単一のケースです。2つ目はstatic factory-method、(静的ファクトリモード)を使用することです。3番目はfactory-method(インスタンスファクトリパターン)です。2番目と3番目のメソッドはあまり一般的ではありません。コンテナーは初期化中にBeanをインスタンス化するためにfatory-methodを呼び出し、fatory-methodはファクトリーでcreateInstanceメソッドを呼び出します。

違いが内部クラスであるかどうかは、通常$を使用して区別します。 com.youku1327. Animal$$dog

5.1コンストラクタを使用してBeanをインスタンス化する

例は次のとおりです。Springフレームワークを使用して開発する一部の人々は、非常に精通している必要があります。この方法を使用して、Beanをインスタンス化します

	<bean id="iocService" class="com.youku1327.ioc.service.IocService">
        <!-- additional collaborators and configuration for this bean go here -->
    </bean>

5.2静的ファクトリメソッドを使用してBeanをインスタンス化する

静的ファクトリは、以下、本実施fatory-方法は、その静的工場自体(あなたは、工場内の他のインスタンスに新しい静的を置くことができる)ですが、それはメソッドの型宣言Statiでなければならない C.

/**
 * @Author lsc
 * @Description <p> </p>
 * @Date 2019/10/31 13:55
 */
public class StaticBeanService {

    private static StaticBeanService staticBeanService = new StaticBeanService();

    // other properties

    private StaticBeanService() {}

    public static StaticBeanService createInstance() {
        // add your properties
        return staticBeanService;
    }

}

構成は次のとおりです。

<?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">

    <!-- static factory method services -->

    <bean id="staticBeanService" class="com.youku1327.bean.entity.StaticBeanService" factory-method="createInstance">

    </bean>
    
</beans>

5.3インスタンスファクトリメソッドを使用してBeanをインスタンス化する

インスタンス化されたファクトリパターンは、静的ファクトリパターンに非常に似ています。違いは、インスタンスの作成方法がstaticキーワードを使用するかどうかです。このインスタンスのCarは実際にはインターフェイスである必要があり、特定の実装クラス(Lamborghini Car、BMW車など)を介してインターフェイスを実装し、Carfactoryの対応するcreateCarInstanceメソッドを使用して、xmlで対応するBeanを構成します。簡単な実装例は次のとおりです。

エンティティは次のとおりです。

/**
 * @Author lsc
 * @Description <p> </p>
 * @Date 2019/10/31 14:58
 */
public class Car {

    private String carName;
    private String color;

    public String getCarName() {
        return carName;
    }

    public void setCarName(String carName) {
        this.carName = carName;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

インスタンス化するファクトリは次のとおりです。

/**
 * @Author lsc
 * @Description <p> </p>
 * @Date 2019/10/31 15:00
 */
public class CarFactory {

    private static Car car = new Car();

    private CarFactory(){

    }

    public Car createCarInstance(){
        return car;
    }
}

構成は次のとおりです。

<?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">

    <!-- the factory bean, which contains a method called createInstance() -->
    <bean id="carFactory" class="com.youku1327.bean.factory.CarFactory">
        <!-- inject any dependencies required by this locator bean -->
    </bean>

    <!-- the bean to be created via the factory bean -->
    <bean id="car" factory-bean="carFactory" factory-method="createCarInstance"/>


</beans>

6つの参照ドキュメント

IOCコンテナ

[この記事のgithubソースコードは、パブリックアカウントの記事の最後にリンクされています]。

おすすめ

転載: www.cnblogs.com/zszxz/p/12696944.html