目次
1.2 XMLに基づいてSpringIoCコンテナを構成する
1.3 XML 設定に基づく Bean のライフサイクルとスコープ
1.4 XML とアノテーションに基づいて SpringIoC コンテナを構成する
1.5 完全にアノテーションが付けられたクラスに基づいて SpringIoc コンテナを構成する
2.1 SpringAop アスペクト指向プログラミングを理解する
2.2SpringAopはアノテーション設定に基づいています
Spring フレームワークの中心的な内容は 3 つの部分に分かれています
SpringIoC コンテナ、SpringAop アスペクト指向プログラミング、SpringTx トランザクションです。以下に、対応するコアコンテンツの関連知識をそれぞれ紹介します。
1. SpringIoC
1.1 SpringIoC コンテナを理解する
原文:SpringIOCコンテナを理解する_Alphamilkのブログ - CSDNブログ
コアコンテンツ:
一、Spring フレームワーク
- Spring Framework は SpringSource Corporation によって開発されたオープンソース アプリケーション フレームワークであり、元々はエンタープライズ開発における一般的な問題を解決するために作成されました。依存関係注入 (DI)、アスペクト指向プログラミング (AOP)、宣言型トランザクション管理などの豊富な機能を提供し、エンタープライズ レベルのアプリケーションの開発をより簡単かつ迅速に行います。
- Spring Framework は Spring ファミリの基本的な実装であり、Spring Cloud、Spring MVC、その他のテクノロジは Spring Framework 上に構築されています。
- Spring Framework には、豊富なエコロジー、モジュール設計、および簡素化された Java 開発という利点があります。革新と開発を続け、さまざまなシナリオのニーズを満たすために新しい機能を導入します。
2. Spring IOC コンテナ
- Spring IOC コンテナは、コンポーネント間の依存関係を管理できる複雑なコンテナであり、コンポーネントの作成と破棄を担当します。通常のコンテナよりも多くの機能と機能を備えています。
- コンポーネントは再利用できるオブジェクトです。たとえば、3 層フレームワークでは、3 層アーキテクチャを 3 つのコンポーネントに分割できます。
- Spring 管理コンポーネントの利点には、コンポーネント間の結合の軽減、コードの再利用性と保守性の向上、構成と管理の容易化、AOP、トランザクション管理などのその他の機能の提供が含まれます。
- SpringIOC コンテナのコア インターフェイスには、BeanFactory と ApplicationContext が含まれます。ApplicationContext は BeanFactory の拡張機能であり、より高度な機能を提供します。
- ApplicationContext には、ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、AnnotationConfigApplicationContext、WebApplicationContext など、さまざまなシナリオや構成メソッドに適した 4 つの特定の実装クラスがあります。
3. Spring IOCのコア機能
- Spring の中核となる機能は、Spring IOC (Inversion of Control) と DI (Dependency Injection) です。
- 制御の反転 (IOC) とは、オブジェクトの作成と呼び出しの制御をアプリケーションからコンテナーに移すことを指します。コンテナーは、オブジェクトの作成と管理、および依存関係注入によるアプリケーションへのオブジェクトの依存関係の注入を担当します。
- 依存関係注入 (DI) は、コンポーネント間の依存関係を転送するプロセスです。依存関係処理はコンテナーに引き渡され、アプリケーション コード内のオブジェクト間の依存関係のハードコーディングを回避し、オブジェクト間の分離を実現します。
- 依存関係の注入は、コンストラクターの注入、Setter メソッドの注入、インターフェイスの注入の 3 つの形式で実装でき、アノテーションまたは XML 構成ファイルを通じて構成されます。
- Spring の IOC コンテナと DI 機能により、コンポーネントの管理と構成がより柔軟になり、再利用可能で保守可能になり、コードのテスト容易性とスケーラビリティが向上します。
1.2 XMLに基づいてSpringIoCコンテナを構成する
原文: XML_Alphamilk のブログに基づく SpringIoC 構成の実装 - CSDN ブログ
芯
1. XML に基づいて Spring IOC を構成します。
- Spring IOC の jar パッケージの依存関係を構成します。
- XML 構成ファイルを作成し、コンポーネントを表す <bean> タグを定義し、コンポーネントの id 属性と class 属性を構成します。
- パラメータなしの構築メソッドの作成、静的ファクトリの作成、および非静的ファクトリの作成を含むコンポーネントの作成を実装します。
2. XML ベースの構成 DI (依存性注入):
-
コンストラクターベースの DI は、単一パラメーターのコンストラクターまたは複数パラメーターのコンストラクターを使用して、コンテナーが複数のパラメーターを指定してコンストラクターを呼び出すことによって実現されます。
- 単一パラメーターのコンストラクター: XML 構成で <constructor-arg ref="..." /> を使用して、挿入されるオブジェクトを指定します。
- マルチパラメータ構築方法: XML 設定で <constructor-arg name="..." value="..." ref="..." /> を使用して、挿入されるパラメータを指定します。
-
setter関数によるDIは、コンテナがコンポーネントのsetterメソッドを呼び出すことで完了します。<property name="..." value="..." ref="..." />を使用して指定できます。挿入されたプロパティ値または引用符。
3. IOCコンテナの作成とコンポーネントの取得
-
IoC コンテナを作成します。
ApplicationContext
インターフェイスの実装クラスを使用して、ClassPathXmlApplicationContext
構成ファイルを指定することでコンテナ オブジェクトを作成できます。ApplicationContext
最初にサブクラス オブジェクトを作成し、次に構成ファイルのパスを設定し、refresh()
メソッドを呼び出してコンテナを更新することもできます。
-
コンテナを通じてコンポーネントを取得する 3 つの方法:
- 1 つ目の方法:
getBean()
メソッドとコンポーネント ID を使用してコンポーネントを取得し、Object
その型のオブジェクトを返し、それを対応する型に変換します。 - 2 番目の方法:
getBean()
メソッドを使用してコンポーネントのタイプをパラメータとして指定し、対応するタイプを直接返します。 - 3 番目の方法: コンポーネント ID を指定せずに、そのタイプに従ってコンポーネントを直接取得します。
- 1 つ目の方法:
1.3 XML 設定に基づく Bean のライフサイクルとスコープ
原文:SpringIoCコンポーネントの高度な機能_Alphamilkのブログ - CSDNブログ
1. Beanのライフサイクル
- ライフサイクルは、対応する JavaBean クラスに対応するパラメータなしのメソッドを作成し、構成 <bean> タグに init-method 属性と destroy-method 属性を追加します。
例:<bean id="beanId" class="com.example.BeanClass" init-method="initMethod" destroy-method="destroyMethod"/>
2.Beanスコープ
- スコープでは、まず、シングル インスタンス モードとマルチ インスタンス モードの 2 種類のスコープが導入されます。
- シングルトン モード (シングルトン) - デフォルトは、<bean> タグを設定した後、コンポーネントを取得するときに同じオブジェクトのみが取得されることを意味します。コンテナは一意の Bean オブジェクトのみを作成し、新しいオブジェクトは作成しません。
例:<bean id="beanId" class="com.example.BeanClass"scope="singleton"/>
- マルチ インスタンス モード (プロトタイプ) マルチ インスタンス モードでは、<bean> コンポーネントを構成した後、コンテナはコンポーネントを取得するたびに新しいオブジェクトを作成します。
例:<bean id="beanId" class="com.example.BeanClass"scope="prototype"/>
1.4 XML とアノテーションに基づいて SpringIoC コンテナを構成する
原文:アノテーション構成に基づくSpringIoC_Alphamilkのブログ - CSDNブログ
1. アノテーション方法とスキャン(IoC)
- アノテーション方法は、特定のアノテーションを使用して、@Component、@Repository、@Service、@Controller などのコンポーネントをマークすることです。
- スキャンとは、Spring コンテナーが指定されたパッケージ内のコンポーネントを自動的にスキャンし、インスタンス化して管理することを意味します。
2. 設定ファイルの概要
- 構成ファイルを使用して、コンポーネントがスキャンするパッケージを指定したり、特定の注釈を含めたり除外したりできます。
- 通常の設定では、スキャンするパッケージを直接指定できます。
- 注釈を含む構成では、パッケージを指定し、指定された注釈を持つコンポーネントのみをスキャンできます。
- 注釈構成を除外してパッケージを指定し、特定の注釈を持つコンポーネントを除外します。
- コンポーネントBeanの名前は、name属性を指定することで設定できます。
3. コンポーネントのスコープと定期的なメソッドのアノテーション
- サイクル メソッドは、コンポーネントの作成、破棄、初期化などのさまざまなライフ サイクルの段階で実行されるメソッドです。
- @PostConstruct アノテーションを使用すると、コンポーネントの作成後に初期化メソッドを実行できます。
- @PreDestroy アノテーションを使用すると、コンポーネントが破棄される前にクリーンアップ メソッドを実行できます。
- Bean のスコープは @Scope アノテーションを通じて設定できます。
4. 参照型自動組立(DI)
- オートワイヤリングとは、Spring コンテナーがコンポーネントに依存関係を自動的に挿入することを意味します。
- オートワイヤリングはタイプに基づいて照合し、タイプに一致するオブジェクトをコンポーネントに挿入できます。
- 自動配線の 3 つのシナリオは、byName、byType、およびコンストラクターの自動配線です。
5. 基本型属性割り当て(DI)
- プロパティの割り当てを通じて、コンポーネントの基本的なタイプのプロパティを直接設定できます。
- 属性の割り当てに @Value アノテーションを使用することもできます。
1.5 完全にアノテーションが付けられたクラスに基づいて SpringIoc コンテナを構成する
原文:構成クラスに基づいた Bean の管理_Alphamilk のブログ - CSDN ブログ
1. アノテーション開発について完全に理解する:
- 完全に注釈が付けられた構成は、Java 構成クラスと注釈を通じて XML 構成ファイルを置き換えます。
- 完全に注釈が付けられた構成では、タイプの安全性と可読性が向上します。
2. 構成クラスとスキャンアノテーション:
- @Configuration を使用して、クラスを構成クラスとしてマークします。これは、Spring Bean を定義し、他のコンポーネントを構成するために使用されます。
- @PropertySource は、外部プロパティ ファイルを Spring 環境にロードするために使用されます。
- @ComponentScan は、スキャン対象の基本パッケージを指定し、その配下のクラスを Spring Bean として登録するために使用されます。
3. AnnotationConfigApplicationContext を通じて IoC コンテナを作成する 2 つの方法:
- AnnotationConfigApplicationContext を直接作成し、構成クラスをインポートします。
- AnnotationConfigApplicationContext インスタンスを作成した後、 register メソッドを呼び出して構成クラスを登録します。
4. @Bean 定義コンポーネント:
- @BeanはSpringが管理するBeanを生成するメソッドを宣言するために使用されます。
- Bean の名前は、name/value 属性を通じて指定できます。
- Bean のカスタム初期化メソッドと破棄メソッドは、initMethod プロパティと destroyMethod プロパティを通じて指定できます。
5. @Bean アノテーションの詳細:
- Bean の名前はデフォルトでメソッド名になりますが、@Bean(name="beanName") を通じて名前を指定することもできます。
- Bean の初期化メソッドと破棄メソッドは、メソッドの @PostConstruct および @PreDestroy アノテーションを使用して定義できます。
- @Bean の initMethod 属性と destroyMethod 属性を通じて、Bean の初期化メソッドと破棄メソッドを指定できます。
- Bean のスコープは @Scope アノテーションによって指定できます。
6. Bean コンポーネント間の呼び出し:
- 他の Bean メソッドを直接呼び出して、対応するコンポーネントを取得できます。
- 他のコンポーネントも、形式パラメータを通じて注入できます。
7. @インポート拡張子:
- @Import は、複数の構成クラスを 1 つの構成クラスに統合できます。
- XML 構成ファイルは、@ImportResource を使用してインポートできます。
2. SpringAop 対面プログラミング
2.1 SpringAop アスペクト指向プログラミングを理解する
原文:Spring AOPアスペクト指向プログラミングを理解する_Alphamilkのブログ - CSDNブログ
コアコンテンツ:
AOP (アスペクト指向プログラミング) は、OOP (オブジェクト指向プログラミング) における非コアコードの重複やメンテナンスの難しさの問題を解決するために使用されるプログラミングの考え方です。AOP は、横断的な関心事項 (ロギング、トランザクション、権限制御など) をビジネス ロジックから分離することで、コードの明瞭さ、シンプルさ、メンテナンスの容易さを実現します。
AOP の中核となる概念には次のものがあります。
- アスペクト: ビジネスとは関係のない一般的な動作、つまり横断的な懸念事項をカプセル化して、コードの再利用を促進し、モジュール間の結合を軽減します。
- アドバイス: 事前通知、復帰通知、例外通知、事後通知、および周囲の通知などのアスペクトの特定の機能を実装します。
- ジョインポイント: インターセプトされたメソッドは、例外がスローされる前、後、またはスローされたときに通知を適用できます。
- ポイントカット: 接続ポイントを見つけて、選択した接続ポイントを指定する式。
- ターゲット: プロキシされるターゲット オブジェクト。
- プロキシ: ターゲット オブジェクトに通知を適用した後に生成されるプロキシ オブジェクト。
- ウィービング: 通知をターゲットに適用し、プロキシ オブジェクトを生成するプロセス。
Spring AOP フレームワークは、AOP プログラミング思考の実装に基づいており、動的プロキシ テクノロジをカプセル化して、動的プロキシの実装プロセスを簡素化します。少量の設定とエントリ ポイントと通知タイプの指定により、アスペクト指向プログラミングを実現できます。Spring AOPは、ロギング、トランザクション処理、セキュリティ制御、パフォーマンス監視、例外処理、キャッシュ制御、動的プロキシなどのさまざまなシナリオに適用して、コードの保守性と再利用性を向上させることができます。
2.2SpringAopはアノテーション設定に基づいています
原文:Spring AOPベースのアノテーション実装と詳細_Alphamilkのブログ - CSDNブログ
1. Spring AOP の基礎となるテクノロジー:
- JDK 動的プロキシ: InvocationHandler インターフェイスを使用してプロキシを実装します。プロキシされる必要があるターゲット クラスはインターフェイスを実装する必要があります。
- CGLIB 動的プロキシ: プロキシされたターゲット クラスを継承することによってプロキシを実装します。ターゲット クラスがインターフェイスを実装する必要はありません。
- AspectJ: 初期の AOP フレームワークである Spring AOP は、AspectJ の AOP アノテーションを借用しています。
2. AOP プログラミングの実装手順:
- アノテーション構成を使用する: @Aspect はクラスをアスペクト クラスとしてマークし、アスペクト ロジックと拡張メソッドの場所を定義します。@EnableAspectJAutoProxy は AspectJ 自動プロキシをオンにし、Spring AOP 機能を有効にします。
- 関連する依存関係をインポートします: Spring Aspects、Spring Context、Spring Test など。
- 拡張メソッドの定義: アノテーション構成を使用して、@Before、@After、@AfterReturning、@AfterThrowing、@Around などの挿入ターゲットの位置を指定します。
- 完了アノテーション: 拡張クラスを IOC コンテナに追加し、アスペクト アノテーション @Component および @Aspect を設定します。
- AspectJ アノテーションを有効にする: 構成クラスで @EnableAspectJAutoProxy アノテーションを使用して、アノテーションのサポートを有効にします。
3. カットポイントに関する詳細情報を取得する方法:
- JoinPoint インターフェイスを使用する: JoinPoint を通じて、ターゲット オブジェクト、ターゲット オブジェクトのクラス、ターゲット オブジェクトの単純なクラス名、メソッド パラメーター配列、メソッド シグネチャ、およびその他の情報を取得できます。
- 拡張メソッドのパラメーター: 拡張メソッドに JoinPoint タイプのパラメーターを追加し、このパラメーターを通じてターゲット オブジェクトの情報を取得できます。
4. ポイントカット式の構文: ポイントカット式の構文には、ポイントカットの一致ルールを定義するために使用できる特定の値とあいまいな値が含まれています。
5. ポイントカット式の再利用:
- 現在のクラスで抽出する: @Pointcut アノテーションを使用して空のメソッドを宣言し、特定のポイントカット式をメソッドに追加します。他の拡張メソッドは、この空のメソッドを呼び出すことでポイントカットを再利用できます。
- ポイントカットを保存するクラスを作成する: ポイントカットを保存する別のクラスを作成し、 @Pointcut アノテーションを使用してポイントカット式を定義します。他のクラスの拡張メソッドは、ポイントカットを格納するクラスのメソッドを参照することで、ポイントカットを再利用できます。
2.3 通知の注釈
原文: Spring Aop--Notification Annotation_Alphamilk's Blog-CSDN Blog
1.アノテーションの周囲: アノテーションの周囲(@Around)は、Spring AOPの通知タイプであり、対象のメソッドの実行前後に周囲の操作を実行します。メソッド呼び出しの前後に、ロギング、パフォーマンス監視などの追加のロジックを追加できます。周囲のアノテーションを使用するには、ProceedingJoinPoint オブジェクトを作成し、メソッド内のこのオブジェクトを通じてターゲット メソッドの実行フローを制御する必要があります。
アドバンテージ:
- 高い柔軟性: ターゲット メソッドの実行の前後に追加のロジック コードを挿入して、メソッドの実行プロセスを完全に制御できます。
- 統合処理: 共通のロジック コードをアスペクトに抽出して、統一された処理ロジックを実現し、各ターゲット メソッドで同じコードを繰り返し記述することを回避します。
- 戻り値は変更可能: ターゲット メソッドの戻り値を変更すると、最終結果が影響を受ける可能性があります。
欠点:
- 複雑さの増加: 他のタイプの通知と比較して、周囲の注釈の使用は若干複雑であり、特に ProceedingJoinPoint の使用については、より多くの理解と習熟が必要です。
- パフォーマンスのオーバーヘッド: 周囲のアノテーションがターゲット メソッド全体の実行プロセスをラップするため、場合によっては、特に処理ロジックがより複雑な場合、特定のパフォーマンス オーバーヘッドが発生する可能性があります。
- 副作用の導入の可能性: サラウンド通知のターゲット メソッドに変更を加える場合は、プログラムの異常な動作や異常な動作につながる可能性のある、予期しない副作用の導入を避けるために注意して操作する必要があります。
2. 優先度アノテーション: 優先度アノテーション (@Order) は、コンポーネントのロード順序を定義するために使用される Spring フレームワークのアノテーションです。クラスレベルまたはメソッドレベルで使用できます。複数のコンポーネントが同じインターフェイスを実装するか、同じ親クラスを継承する場合、 @Order アノテーションを使用してそれらの読み込み順序を指定できます。@Order 値が小さいほど優先順位が高く、読み込み順序も高くなります。同じ優先度を持つコンポーネントの読み込み順序は不確実であり、不確実性を避けるために優先度を異なる値に設定することが最善です。
@Order アノテーションを使用して、同じメソッドに異なる拡張機能を追加し、拡張機能の実行順序を指定します。
3. Spring-Tx トランザクション
3.1Spring-Txトランザクション
原文: Spring-TX Transaction_Alphamilk's Blog-CSDN Blog
コアコンテンツ
1. トランザクション管理の種類:
- プログラムによるトランザクション: トランザクションを管理するコードを手動で記述すると、操作が複雑になります。
- 宣言型トランザクション: アノテーションまたは構成ファイルを通じてトランザクションを制御し、コードは簡潔です。
2. Spring トランザクション マネージャーの使用:
- インターフェイス: Spring トランザクション マネージャーを使用してトランザクションを管理します。
- 実装クラス: 永続層フレームワークに従って適切な実装クラスを選択します。
3. トランザクションアノテーションの使用:
- マーク: トランザクション管理が必要なメソッドまたはクラスをマークするために使用されます。
- プロパティ: 読み取り専用モード、タイムアウト、指定された例外および分離レベルが含まれます。
4. トランザクション属性の分類:
- 読み取り専用モード: トランザクションが読み取り専用かどうかを制限します。
- タイムアウト: トランザクションの実行時間を制限します。
- 例外の指定: トランザクション ロールバックの例外タイプを指定します。
- 分離レベル: トランザクションの分離レベルを定義します。
5. トランザクションの送信特性:
- トランザクション間の関係を定義します。
- 一般的に使用される属性は REQUIRED と REQUIRES_NEW です。