手書きの Spring プログレッシブ ソース コードの練習

記事ディレクトリ

0 まえがき

書籍『手書きの春のゆるやかなソースコード実践』の読書メモです。

0.1 Spring フレームワーク マップ

ここに画像の説明を挿入

1 単純な Spring Bean コンテナの実装を開始する

1.1 設計上のアイデア

Map データ構造を使用して、すべての Bean オブジェクトを格納します。

2 テンプレートモードに基づいたオブジェクトの定義、登録、取得を実現

2.1 設計上のアイデア

テンプレート モードを使用すると、コア メソッドの呼び出しロジックと標準定義が統一的に使用されるため、特定のメソッドの呼び出しロジックを意識することなく、後続のステップを適切に実装できます。統一された方法で実行され、クラスの継承者は特定のメソッドがどのように実装されるかを気にするだけで済みます。

2.2 クラス図

Beanコンテナクラスの設計

2.3 実装

ここに画像の説明を挿入
https://github.com/kaikai-sk/book-small-spring.git/

2.4 質問と考察

  1. テンプレート モードの使用
    以前の使用方法がそのまま継承されます。
BaseClass {
	pubic void mianProcess() {
		process1();
		process2();
		process3();
	}
}

Class A extends BaseClass {
	pubic process2() {
	}
}

Class B extends BaseClass {
	pubic process2() {
	}
}
  1. AbstractAutowireCapableBeanFactory が最初に createBean 機能を提供する理由
    通常の理解では、ビジネス プロセスの順序に従って、最初にサブクラス 1 が beanDeinition を取得する機能を実現し、次にサブクラス 2 が createBean 機能を実現します。これはメインプロセスに沿ったものです。
  2. BeanDefinition getBeanDefinition(String name); インターフェース内で直接定義されていないのはなぜですか? 体感も可能です。

3 ストラテジパターンに基づくコンストラクタによるクラスインスタンス化の実装

3.1 設計上のアイデア

型のインスタンス化に newInstance を直接使用することはできません。パラメーターを持つコンストラクターの場合を処理します。クラス インスタンスを作成するには、JDK 独自の機能や cglib など、さまざまな技術的手段があります。組織は戦略パターンによって組織化できます。

3.2 クラス図

ここに画像の説明を挿入

4 プロパティと依存オブジェクトの挿入

4.1 設計上のアイデア

表示引用类型的属性。
public class BeanReference {

    private final String beanName;

    public BeanReference(String beanName) {
        this.beanName = beanName;
    }

    public String getBeanName() {
        return beanName;
    }

}
基本类型的属性。
public class PropertyValue {

    /** 属性名称 */
    private final String name;

    /** 属性值 */
    private final Object value;
对象数组的表示
public class PropertyValues {
    private final List<PropertyValue> propertyValueList = new ArrayList<>();
}

5 リソースファイルに定義したオブジェクトをコンテナに登録します

5.1 設計上のアイデア

ResourceとResourceLoaderはリソースのロードを実現します。BeanDefinitionReader はリソースの解析を実装し、ファイルに定義されている Bean をコンテナに注入します。

5.2 クラス図

ここに画像の説明を挿入

6 ApplicationContextの実装

6.1 設計上のアイデア

リソース管理とBean管理の機能をApplicationContextに統合します。コンテキストのカプセル化により、システム全体の使いやすさが向上します。

6.2 クラス図

  1. Bean 管理機能の抽象化レベル
    ここに画像の説明を挿入
  2. ApplicationContext の設計アイデア
    ここに画像の説明を挿入

7 Beanオブジェクトの初期化と破棄

7.1 設計上のアイデア

平方根インターフェイスは、ユーザーがオブジェクトの初期化メソッドと、オブジェクトが破棄される前に呼び出されるメソッドをカスタマイズするためのものです。

7.2 クラス図

  1. Bean 管理におけるオブジェクトの初期化と破棄
    ここに画像の説明を挿入
  2. ApplicationContext での初期化と破棄
    ここに画像の説明を挿入

8 コンテナオブジェクトの検知

8.1 設計上のアイデア

コンテナ ユーザーがコンテナのいくつかの主要なオブジェクトを認識できるようにします。たとえば、コンテナのユーザーは ApplicationContext または BeanFactory を取得できます。

8.2 クラス図

ここに画像の説明を挿入

8.3 概要

ここに画像の説明を挿入

9 オブジェクトスコープとFactoryBean

9.1 設計上のアイデア

FactoryBean はファクトリ オブジェクトです。サードパーティのオブジェクトプロデューサーは、FactoryBean の実装クラスを提供し、一部の処理内容を無視して複雑なオブジェクトをラップ (プロキシ オブジェクトのラップなど) します。

Spring コンテナを通じて取得されるオブジェクトには 2 つのタイプがあります。1 つはシングルトンで、もう 1 つは非シングルトンです。シングルトン オブジェクトはコンテナーに保存され、最初の作成後に再作成されません。複数のインスタンス。毎回オブジェクトが新しく作成されます。

9.2 クラス図

ここに画像の説明を挿入

10 オブザーバーパターンに基づくコンテナイベントの公開

10.1 設計上のアイデア

Eventのコンテナイベントとイベントリスナーの機能をオブザーバーモードで設計・実装します。Spring フレームワークでは、独自のイベント情報を定義、監視、公開できます。

10.2 クラス図

ここに画像の説明を挿入

11 JDK と Cglib に基づいたオブジェクト動的プロキシの実現

11.1 設計上のアイデア

動的プロキシを実現し、AOP機能の実現を準備します。

11.2 クラス図

ここに画像の説明を挿入

12 AOP を Bean 宣言サイクルに統合する

12.1 設計上のアイデア

aop を実装する関連コードを Bean のステートメント サイクルに統合します。AOP の使用を簡素化します。

12.2 クラス図

ここに画像の説明を挿入

13 登録されたBeanオブジェクトを自動スキャンする

13.1 設計上のアイデア

@Componentの機能を実装します。

13.2 クラス図

ここに画像の説明を挿入

14&15 アノテーションによる属性情報の挿入

14.1 設計上のアイデア

@Value や @Autowired などの関数を実装します。

14.2 クラス図

ここに画像の説明を挿入

16 L3 キャッシュによる循環依存関係の解決

17 型変換

17.1 設計上のアイデア

鍵となるのは、さまざまな種類のコンバーターをどのように整理するかです。

17.2 クラス図

ここに画像の説明を挿入

18 JDBC関数の統合

18.1 設計上のアイデア

JDBC テンプレートをデータベース操作全体のエントリ クラスとしてカプセル化します。

18.1 クラス図

ここに画像の説明を挿入

19 トランザクション処理

19.1 設計上のアイデア

例外が発生したときに AOP の機能を使用してロールバックします。

19.2 クラス図

ここに画像の説明を挿入

20 シンプルな ORM フレームワークの実装

20.1 アイデア

ORM (オブジェクト リレーショナル マッピング): オブジェクト リレーショナル マッピングは、オブジェクト指向プログラミング言語でさまざまな種類のシステムのデータ間の変換問題を解決するために使用されます。

20.2 クラス図

ここに画像の説明を挿入

21 ORM フレームワークを Spring コンテナに統合する

21.1 クラス図

ここに画像の説明を挿入

筆記面接でよくある 22 の質問

22.1 複数の AOP のシーケンス

順序アノテーション仕様

22.2 BeanFactoryとFactoryBeanの違い

FactoryBean は複雑なオブジェクトをラップします。

22.3 循環依存関係の解決

L3キャッシュ

22.4 トランザクションの伝播タイプ

22.5 Spring トランザクション失敗のシナリオ

https://blog.csdn.net/hanjiaqian/article/details/120501741

おすすめ

転載: blog.csdn.net/kaikai_sk/article/details/129470619