SpringIOC と AOP 原則の詳細な説明
IoC (制御の反転)
( 1) . IoC (Inversion of Control) は、従来の実装ではプログラム コードによって直接制御されるのではなく、コンテナによって制御されるプログラム オブジェクト間の関係を指します。アプリケーションコードから外部コンテナに制御を移すことを反転といいます。 Spring の場合、Spring はオブジェクトのライフ サイクルとオブジェクト間の関係を制御します。IoC には「Dependency Injection」という別の名前があります。名前が示すように、いわゆる依存関係の注入は、コンポーネント間の依存関係が実行時にコンテナによって決定されること、つまり、コンテナがコンポーネントに特定の依存関係を動的に注入することを意味します。
(2). Spring の仕組みでは、すべてのクラスが Spring コンテナに登録され、それが何であるか、何が必要かを Spring に伝え、システムが適切なときに Spring がそれを実行します。あなたが望むものをあなたに与え、そしてあなたを必要とする他のものにもあなたを与えてください。すべてのクラスの作成と破棄は Spring によって制御されます。これは、オブジェクトのライフサイクルが、それを参照するオブジェクトによって制御されなくなり、Spring によって制御されることを意味します。以前は特定のオブジェクトに対して他のオブジェクトを制御していましたが、現在はすべてのオブジェクトがバネによって制御されるため、これを制御の反転と呼びます。
(3). システム運用中に、オブジェクトに必要な他のオブジェクトを動的に提供します。
(4). 依存性注入の考え方はリフレクション機構によって実現されており、クラスをインスタンス化する際にリフレクションを通じてクラス内のsetメソッドを呼び出し、事前にHashMapに保存しておいたクラス属性をクラスに注入します。クラス。全体として、従来のオブジェクト作成方法では、通常、呼び出し元が呼び出し先のインスタンスを作成しますが、Spring では、呼び出し先の作成作業が Spring によって完了し、その後呼び出し元が注入されます。これがいわゆる依存関係です。インジェクションまたはコントロールの反射の変更。注入方法には、依存関係注入と設定注入の 2 つがあり、IoC の利点は、コンポーネント間の結合を軽減し、ビジネス オブジェクト間の置き換えの複雑さを軽減し、オブジェクトの柔軟な管理を可能にすることです。
AOP (アスペクト指向プログラミング)
(1). AOP アスペクト指向プログラミングは IoC に基づいており、OOP を補足するのに役立ちます。 #(2 ). AOP は、「クロスカッティング」と呼ばれるテクノロジーを使用して、カプセル化されたオブジェクトの内部を分析し、複数のクラスに影響を与えるパブリックな動作を再利用可能なモジュールにカプセル化し、それを「Aspect」と名付けます。いわゆる「アスペクト」とは、簡単に言えば、システム内のコードの重複を減らすために、ビジネスとは関係がないが、ロギングなどのビジネス モジュールによって共同で呼び出されるロジックや責任をカプセル化することです。モジュール間の結合を軽減し、将来の操作性や保守性に貢献します。
(3). AOP は水平関係を表し、「オブジェクト」をオブジェクトのプロパティと動作をカプセル化する中空の円柱に例えます。アスペクト指向プログラミングの方法は、この円柱が切り取られることです。ビジネス ロジックを選択的に提供するセクション。そして、カットされた部分がいわゆる「アスペクト」です。そして、これらの切断された部分を驚異的なスキルで復元し、痕跡を残さずに効果を完成させました。
(4). AOP を実装するテクノロジは、主に 2 つのカテゴリに分類されます: 1 つは、動的プロキシ テクノロジを使用して、メッセージをインターセプトし、元のオブジェクトの動作の実行を置き換えることでメッセージを装飾するものです。静的ウィービングを使用して「アスペクト」を作成するための特定の構文を導入し、コンパイラーがコンパイル中に「アスペクト」に関連するコードをウィービングできるようにします。
(5). Spring は AOP を実装します: JDK 動的プロキシと CGLIB プロキシ JDK 動的プロキシ: そのプロキシ オブジェクトは特定のインターフェイスの実装である必要があり、実行時にインターフェイスの実装クラスを作成することで完成します。ターゲット オブジェクトのプロキシ。その 2 つのコア クラスは InvocationHandler と Proxy です。 CGLIB プロキシ: 実装原理は JDK ダイナミック プロキシと似ていますが、実行時に生成されるプロキシ オブジェクトがターゲット クラス用に拡張されたサブクラスである点が異なります。 CGLIB は効率的なコード生成パッケージです。最下位層は、ASM (オープン ソース Java バイトコード編集クラス ライブラリ) に依存してバイトコードを操作することによって実装されています。そのパフォーマンスは JDK よりも優れています。パッケージ asm.jar および cglib.jar を導入する必要があります。 AspectJ によって挿入されたアスペクトと @AspectJ アノテーション駆動のアスペクトの使用は、実際には最下位レベルの動的プロキシを通じて実装されます。
(6). AOP の使用シナリオ:
##コンテキストの受け渡し コンテンツの受け渡し永続化
#リソースプーリング ステップ
#トランザクション トランザクション管理推奨チュートリアル: 「
Java チュートリアル以上がSpring IoC と AOP の原則の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。