まず、AOPとは何でしょうか?
そして、OOPのコントラスト、アスペクト指向、伝統的なOOPのコードロジックが横断的問題、健康の社長、これらの横断的な問題の数のトップダウンプロセスで開発され、当社の主要なビジネス・ロジックは、すべてのコードに散在されることはありません場所が困難維持すること、プログラミングアイデアAOPコードの高効率と再利用の開発、デカップリングの目的を達成するように、ビジネスロジックと分離の横断的な問題である(目的は、再利用コード、コード抽出パブリックであります)
二、AOPアプリケーションシナリオ
1、ログ
2、権限の検証
図3に示すように、検査の効率
4、トランザクション管理
三、springAop基礎となる技術
1、JDKの動的プロキシ
2、CGLIBエージェント
質問:コンパイル時に織り込まれているか、実行時には織りましたか?
---->実行、生成バイトコード、および仮想マシンにロードされ、反射の原理を利用してJDK、ASM CGLIB使用の原則。
質問:時間の初期化期間織りを織ったり、オブジェクトを取得しますか?
----「初期化時間は、春の容器に入れ、ターゲットオブジェクトエージェントとなっています
動的プロキシまたはJDK CGLIBのデフォルトを使用して春AOP:通報しますか?
インタフェースは実装するクラスは、JDKを使用する場合は-----「これは、条件によって異なります。あなたがインターフェイスを実装していない場合は、CGLIBを使用しています。
第四に、春AOPとAspectJの関係?
AOPにこの目的を達成するために、技術的なもの、どちらも1、スプリングAOPの出現は、AspectJのプログラミングスタイルを見ます
---「ここでは、人々は非常に便利な、それを、スタイルをプログラミングする際に使用されたオリジナル早春のAOPで話使用されていますが、人々は理解していません。その後、スプリングAOPは、プログラミングスタイルのプログラミングにAspectJのアクセスを開始しました
ここでは春を過ごすためにセットアップ少し卵が(あなたが知っていれば、スキップしてください)、ですが、XMLファイルを使用していない、と豆を容器に注入され、プロジェクトから出てくるからコンテナ。
最初のステップ:追加春-文脈依存
< 依存性> < のgroupId > org.springframework </ のgroupId > < たartifactId >ばねコンテキスト</ たartifactId > < バージョン> 5.0.8.RELEASE </ バージョン> </ 依存>
第二ステップ:三つのクラス、クラスのテストを追加します。
@Configuration @ComponentScan( "com.ving") パブリッククラスAopConfig { } ////////////////////////////////// ////////////// @Component パブリッククラスIndexDao { 公共ボイドクエリ(){ System.out.printlnは( "DAO ----クエリ")。 } } //////////////////////////////////////////////// パブリッククラスTest { パブリック静的な無効メイン(文字列[] args){ AnnotationConfigApplicationContext annotationConfigApplicationContext = 新しいAnnotationConfigApplicationContext(AopConfig.class) 。 annotationConfigApplicationContext.start(); IndexDao豆= annotationConfigApplicationContext.getBean(IndexDao.class)。 bean.query(); } } //////////////////////////////////////////////// を印刷結果: 2019年12月16日午前8時58分38秒午後org.springframework.context.support.AbstractApplicationContext prepareRefreshの 情報:爽やかorg.springframework.context.annotation.AnnotationConfigApplicationContext@6438a396:起動日[月 12月16日夜08時58分:38は、CST 2019]であるのルート階層コンテキストDAOクエリ----
私たちは、見下すし続けます
五、春AOPのアプリケーション
アスペクトセクション
ポイントカットは、(あなたが完全に可能なアプリケーションでは、このコンセプトのカットポイントを理解している場合)(表と同様)の接続点の集合を表し、
ポイント対象オブジェクトメソッド(各レコード)に参加
ターゲットオブジェクトのプロキシロジックは製織工程に追加された織りが呼び出されます
アドバイスの通知タイプ
以下は、コードのセクション、タンジェントポイント、接続ポイント、4人の関係の通知です!
/ **
*
*カット
*管理を与えなければならない春
* /
@Component
@Aspect
パブリッククラスVingAspectJ {
/ **
*カットオフポイント
*カットポイントは、メソッドで宣言するのはなぜ?それに書かれたノートの目的
*ポイントカットこれはセット(つまり、メソッドの集合である)の接続点である
* /
(。 "実行(com.ving.dao * * *(..))")@Pointcut
公共ボイドポイントカット(){
}
/ **
*通知- - "設定接点
* /
" @After( "com.ving.config.VingAspectJ.pointCut())
()の後、公共ボイド{
するSystem.out.println("後");
}
@Before(" com.ving。 ")config.VingAspectJ.pointCut()
(){ 前公共ボイド
前「)のSystem.out.println("。
}
}