- 分析:銀行振込の例初めに、4つの接続は、クエリへのアクセス、アカウントの転送、転送、更新、ロールアウトのアカウントです取得します。特定の異常が現れた場合、更新の背中がお金をカットしていませんでした他のアカウントにお金を追加したアカウントで、その結果、実行されなかったが、このような転送は、前のコードの実行を同期していないでしょう。
- ソリューション:全体のプロセスは、オブジェクトが一つだけのスレッドがトランザクションを制御することができているように、あなたがオブジェクトにThreadLocal接続を使用して、現在のスレッドが結合、接続が終わりました。
- 制御トランザクションは、ビジネス層である必要があり、我々は非常に面倒で、スレッドに結びついた接続とトランザクション管理に、2つのツールを使用する必要があります。ダイナミックエージェント技術を使用する必要があり、トランザクション管理のアプローチは、プロキシオブジェクトのいずれかの方法は、プロセスを通じてなりますように拡張されます。
三日目のテーマは学ぶ: AOPアスペクト指向プログラミング
定義:事前にコンパイルの仕方や実行時に動的なエージェント技術によって統一されたプログラム機能のメンテナンスを実施します。AOPはOOPの継続がジェネリックプログラミングの機能的誘導体です。
あなたは既存の方法の改善に基づいて、ソースコードを変更せずに、動的プロキシ技術を使用して、実行する必要がある場合には、プログラムのコードが抽出繰り返すだけです。
AOPの役割:プログラムを実行している時には、既存の強化方法にソースコードを変更しません。
長所:簡単なメンテナンス、開発効率を向上させ、コードの重複を減らします。
AOPの実装:動的プロキシ技術を使用します。
* AOP [フォーカス]春
説明:春AOPを学び、コンフィギュレーション、動的な機関によるものです。
関連用語:
- ジョインポイントは、(接続点):春に、傍受の点を指し、これらの点は、この方法をサポートするのみスプリング型接続点ので、方法を指します。
- PointOut(エントリー・ポイント)は:私たちはインターセプトをジョインポイントにしたいものの出発点を指します。
- アドバイス(通知/エンハンスド):通知がジョインポイントの後に行うに傍受事を意味しています。通知の種類:アドバイスの周りに通知フロント、リアの通知、異常通知、最後の通知、。
- アドバイスの前に:method.invoke()の前に実行します
- method.invoke実行後():アドバイスを返送した後、
- 例外通知:異常通知キャッチ()内の
- 最終予告:で、最後に()最終の通知で
- アドバイス周り:通知に、囲まれた実行通知に実行全体の動的プロキシプロセス全体のメソッドを呼び出すには、明確なエントリポイントメソッド呼び出しに囲まれます
- 導入(導入):前提のコードを変更することなく、特別な通知を導入し、導入クラスは、実行時に動的に追加またはフィールド法もよいです。
- 対象者(観客):オブジェクトであるプロキシターゲットオブジェクトは、プロキシされます。
- (製織)織り:それは、新しいプロキシオブジェクトを作成するプロセスを対象物に印加されるエンハンスメントを指します。エージェントの動的ばね織り、コンパイルおよび製織のクラスローディングを使用してAspectJの織りつつ。
- プロキシ(エージェント):AOP強化クラスに織り込まれた後、結果のプロキシクラスを生成します。
- 態様(セクション):通知が結合され、エントリポイント(導入)A。
AOPの事の春に学ぶことは明確でなければなりません。
- 開発フェーズ(私たちは)
- コアビジネスコード(メイン開発ラインを)書きます
- 通知にした抽出した共通コード、(開発の最終段階を行います)
- 構成ファイル内の、開始点と通知宣言の関係そのセクション
- 運用段階(バネフレームが完了するまで)
春のエントリポイントメソッドフレームワークの実装を監視します。エントリポイントの監視方法が実行されると、プロキシ機構を使用して、動的に作成されたプロキシはプロキシオブジェクトに対応する位置に、通知タイプに基づいて、ターゲット・オブジェクトをオブジェクト、製織に対応する通知機能は、完全なコード論理演算を完了します。
XMLベースの構成春AOPの手順:
- スプリングBeanへも通知は、管理します。
- AOPを使用してください:config設定ラベルは、AOPの始まりを示します。
- AOPを使用する:態様ラベル部が構成することを示す(:一意の識別子、REF属性:id属性は、通知クラスビーンIDを指定)
- AOPで:内部の局面は、タグに対応する通知の種類を設定するために使用しました
- ポイントカット表現について:
- アクセス修飾子は省略することができます
- 戻り値は、任意の値のワイルドカードを返すために使用することができます*
- パッケージ名は、ワイルドカード*は任意のパッケージを表していますが、いくつかのパッケージを作成する必要がありますいくつかのレベルがあります使用することができます
- あなたは...パッケージ名を使用することができ、現在のパッケージとそのサブパッケージを表し
- クラス名とメソッド名は、ワイルドカードを達成するために使用することができます*
- あなたは、パラメータがパラメータは、パラメータの任意の数および任意のタイプを表すことができるかどうかを示す..使用することができます
実際の開発のポイントカット表現は、一般的に、クラスのメソッドをすべて実装するサービス層に切り替えることが書かれて:
* xx.xx.service.impl。*。*(..)
AOPを使用して、設定エントリポイント式:ユニバーサル表現ポイントカットポイントカットを、AOPで書かれたラベル:外側面ラベルは、次に利用可能なすべてのファセットになったが、最初に言及します。id属性を一意に指定された式を識別するために使用される、表現属性はエントリポイント表現の内容を指定するために使用されます。
AOPで:内側の側面ポイントカット-refの属性タグを受信するため。
< AOP:設定> < AOP:ポイントカットID = "PT1" 表現= "実行(* com.itheima.service.Impl *(..)。。)" /> < AOP:アスペクトID = "logAdvice" REF = "txManager" > < AOP:前メソッド= "のbeginTransaction" ポイントカット-REF = "PT1" > </ AOP:前> < AOP:後を返す方法は= "コミット" ポイントカット-REF = "PT1を" > </ AOP:後の復帰> < AOP:アフター投げる方法を=「ロールバック」ポイントカット-REF= "PT1" > </ AOP:アフター投げ> < AOP:後メソッド= "解放" ポイントカット-REF = "PT1" > </ AOP:後> </ AOP:態様> </ AOP:設定>
スプリングは、通知を囲む:これは、手動制御方法は、コード内で実行されたとき、ばねを高めることができる私達のためのフレームワークです。
私たちは、サラウンド設定に気づくときしかし、なぜ、エントリポイントメソッドが実行され、様々な通知の実装方法ではないですか?その理由は、動的プロキシのアドバイスを中心に見つかった動的プロキシの基礎となるサラウンド通知コードに明確なエントリポイントメソッド呼び出しを持っているということであり、我々が設定方法がありません。
春の構成では、アノテーションベースのAOPステップ:
クラス宣言部クラスに@Aspect注釈。
@pointcut文のポイントカット表現
AOPのアノテーションの設定を使用する場合、通常4は、呼び出しシーケンスの問題を通知し、助言に基づくアノテーションの問題はないの周りには、使用することができます。
純粋なサンプル構成を使用する場合は、コンフィギュレーションクラスに@EnableAspectJAutoProxyこのコメントを追加するには注意を払う(春を聞かせすることは、アノテーションベースのAOPをサポートしています)