SpringAOPは何ですか?
関連するプログラミング、抽出された独立の数、独立して実施し、クラスの動的に指定されたメソッドへのコードに切断は、プログラミングモードは、AOP(位置を指定するアスペクト指向プログラミング)。
AOPの概念を説明
態様(セクション):アスペクトはアスペクトは、いくつかのポイントカット及び対応情報に含まれる、Java(登録商標)と同様クラス宣言を宣言する。
関節点(接続点):ネスト他の関節点もできる典型的なメソッド呼び出しを含むプログラムで明確に定義された点を示し、等とアクセスクラスメンバー例外ハンドラブロック自体を行います。
ポイントカット(カットポイント):発生に対応するローカル情報を定義するなど、関節点の集合、関節点またはロジックの組み合わせによって、またはワイルドカードによって、正規表現、一緒になってを表します。
アドバイス(拡張):特定の操作が行われる定義情報の定義手順ポイントカットポイントは、それがコードの実行後、または代わりに、前に、後に関節点の周りにそれぞれ前で区別されます。
ターゲット(観客):ターゲットオブジェクトの織りアドバイス..
:ウィービング(製織)と共にプロセスアスペクトと他のオブジェクトとのAdvicedオブジェクトを作成します
例:
インタフェース:
パッケージcom.java.test6。 / ** * @author nidegui * @Create 2019年6月23日午前9時40分 * / パブリック インターフェイス学生{ 公共 空addStudent(文字列名)。 }
クラスの実装:
パッケージcom.java.test6。 / ** * @author nidegui * @Create 2019年6月23日午前9時41分 * / パブリック クラス StudentImpl 実装 学生{ @オーバーライド 公共 のボイドaddStudent(文字列名){ System.out.println(「アドオン学生」+ 名)。 } }
カットポイント強化カテゴリ:
パッケージcom.java.test6。 輸入org.aspectj.lang.JoinPoint; 輸入org.aspectj.lang.ProceedingJoinPoint; / ** * @author nidegui * @Create 2019年6月23日9時45分 * / パブリック クラスStudentServiceAspect { // 事前通知方法前通知 公共 ボイド(ジョインポイントJP)前{ System.out.println( "类名:" + 。。jp.getTarget()のgetClass()のgetName()); System.out.println( "方法名:" + 。jp.getSignature()のgetName()); System.out.println( "学生が追加開始:" + jp.getArgs()[0 ])。 System.out.println( "学生の追加を開始" ); } // ポスト通知 公共 のボイドdoAfter(ジョインポイントJP){ System.out.println( "类名:" + 。。jp.getTarget()のgetClass()のgetName()); System.out.println( "方法名:" + 。jp.getSignature()のgetName()); System.out.println( "完成追加学生:" + jp.getArgs()[0 ]); } // 环绕通知 パブリックオブジェクトdoAround(ProceedingJoinPoint PJP)はスローのThrowableを{ System.out.println(「の前に生徒を追加」); オブジェクトRETVAL = pjp.proceed()。 System.out.println(RETVAL)。 System.out.println( "学生を追加した後" ); を返すRETVALを。 } // 復帰通知 公共 ボイドdoAfterReturning(ジョインポイントJP){ System.out.println( "復帰通知" ); } // 異常通知 公共 ボイドdoAfterThrowing(ジョインポイントJP、ThrowableのEX){ System.out.println( "例外通知" ); System.out.println( "例外情報:" + ex.getMessage()); } }
Spring構成ファイル:
<?= "1.0"エンコード= "UTF-8" XMLバージョン?> < 豆のxmlns = "http://www.springframework.org/schema/beans" のxmlns:XSI = "http://www.w3.org/2001 / XMLスキーマ・インスタンス" のxmlns:AOP = "http://www.springframework.org/schema/aop" XSI:のschemaLocation =" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd」> < ビーンID = "studentImpl" クラス= "com.java.test6.StudentImpl" > </ ビーン> < ビーンID = "studentAcpect" クラス= "com.java.test6.StudentServiceAspect" > </ 豆> < AOP:設定> < AOP:アスペクトID = "studentAcpect" REF = "studentAcpect" > <! - 定义一个切点- > < AOP:ポイントカットのid = "B" 表現= "実行(* com.java。 TEST6 * *(..))」。。> </ AOP:ポイントカット> <! - 定义前置通知- > < AOP:前メソッド= ""の前にポイントカット-REF = "B" > </ AOP:前> <! - 后置通知- > < AOP:後の方法= "doAfter" ポイントカット-REF = "B"> </ AOP:後> <! - 环绕通知- > < AOP:周りのメソッド= "doAround" ポイントカット-REF = "B" /> <! - 返回通知- > < AOP:アフター返す方法= "doAfterReturning" ポイントカット-REF = "B" /> <! - 异常通知- > < AOP:アフター投げる方法"doAfterThrowing" = ポイントカット-REF = "b"を投げる= "EX" /> </ AOP:側面> </ AOP:設定> </ 豆>
テストカテゴリ:
パッケージcom.java.test6。 輸入org.springframework.context.ApplicationContext; 輸入org.springframework.context.support.ClassPathXmlApplicationContext; / ** * @author nidegui * @Create 2019年6月22日午後2時47分 * / パブリック クラスのテスト{ 公共 静的 ボイドメイン(文字列[]引数){ ApplicationContextのAC = 新 ClassPathXmlApplicationContext( "beanss.xml" ); 学生人々 =(学生)ac.getBean( "studentImpl" ); people.addStudent( "zhangsna" ); } }
コンソールの出力ログ:
:への記事の転載https://www.cnblogs.com/nidegui/p/11072014.html