SpringノートSpringのAOPサポート
AOPプログラミングを見渡すと、プログラマーが参加する必要があるのは3つの部分だけです.一般的なビジネスコンポーネント を定義する.は、1つの切り込みポイントが複数のビジネスコンポーネント を横切る可能性がある切り込みポイントを定義する.定義強化処理:強化処理は、AOPフレームワークにおいて通常のビジネスコンポーネントに織り込む処理動作 である.
プロキシオブジェクトのメソッド=プロキシオブジェクトのメソッド+拡張処理
次に、SpringのAOP構成を記録します
Springアプリケーションで@AspectJサポートを開始するには、アプリケーションのクラスパスに2つのAspectJライブラリを追加する必要があります:aspectjweaver.jarとaspectjrt.jar、バイトはAspectJインストールパスのlibディレクトリの下の2つのJARファイルを使用します.
1.切断面Beanの定義
@AspectJを使用してJavaクラスをマークします.Javaクラスは断面Beanとして使用されます.
2、Before強化処理の定義
//Beforeコメント
@Before("execution(* com.zhao.aopdemo.*.say*(..))")
解釈:com.zhao.aopdemoパッケージの下のすべてのクラスのsayで始まる方法
3、AfterReturning強化処理の定義
@AfterReturningを使用する場合、拡張処理方法afterReturningSayでwordという名前のパラメータを使用できることを示します.このパラメータは、ターゲットが送信した戻り値を表します.
4、AfterThrowing強化処理
出力:
Before say...
ターゲットクラスからの例外:java.lang.ArithmeticException:/by zero
Exception in thread "main"java.lang.ArithmeticException:/by zero
at com.zhao.aopdemo.Chinese.sayThrowable(Chinese.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
......
メインプログラムは終了しました
ここでafterThrowingSayメソッドのパラメータタイプをNull PointerException異常に置き換えると、この切り込み点はNull PointerException異常のみに一致する
5、After強化処理
Springでは、AfterReturning強化処理と少し似ていますが、違いもあります. AfterReturning強化処理は、目標方法が正常に完了する後にのみ、 に織り込まれる. Afterエンハンスメント処理は、ターゲットメソッドがどのように終了するか(成功完了と異常終了の両方を含む)にかかわらず、 に織り込まれる.
6、Around強化処理
未完待続...
プロキシオブジェクトのメソッド=プロキシオブジェクトのメソッド+拡張処理
次に、SpringのAOP構成を記録します
<?xml version="1.0" encoding="UTF-8"?>
<beans ......
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="......
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<!-- @AspectJ -->
<aop:aspectj-autoproxy/>
<!-- Spring XML Schema , Spring @AspectJ -->
<!--<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator"/>-->
</beans>
Springアプリケーションで@AspectJサポートを開始するには、アプリケーションのクラスパスに2つのAspectJライブラリを追加する必要があります:aspectjweaver.jarとaspectjrt.jar、バイトはAspectJインストールパスのlibディレクトリの下の2つのJARファイルを使用します.
1.切断面Beanの定義
@AspectJを使用してJavaクラスをマークします.Javaクラスは断面Beanとして使用されます.
2、Before強化処理の定義
package com.zhao.aopdemo;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class BeforeAdviceTest {
@Before("execution(* com.zhao.aopdemo.*.say*(..))")
public void beforeSay()
{
System.out.println("Before say...");
}
}
//Beforeコメント
@Before("execution(* com.zhao.aopdemo.*.say*(..))")
解釈:com.zhao.aopdemoパッケージの下のすべてのクラスのsayで始まる方法
3、AfterReturning強化処理の定義
package com.zhao.aopdemo;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class AfterReturningAdviceTest {
@AfterReturning(returning = "word", pointcut = "execution(* com.zhao.aopdemo.*.say*(..))")
public void afterReturningSay(Object word) {
System.out.println("After Returning say..." + word);
}
}
@AfterReturningを使用する場合、拡張処理方法afterReturningSayでwordという名前のパラメータを使用できることを示します.このパラメータは、ターゲットが送信した戻り値を表します.
4、AfterThrowing強化処理
package com.zhao.aopdemo;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
@Aspect
public class AfterThrowingTest {
@AfterThrowing(throwing = "ex", pointcut = "execution(* com.zhao.aopdemo.*.say*(..))")
public void afterThrowingSay(Throwable ex) {
System.out.println(" :" + ex);
}
}
出力:
Before say...
ターゲットクラスからの例外:java.lang.ArithmeticException:/by zero
Exception in thread "main"java.lang.ArithmeticException:/by zero
at com.zhao.aopdemo.Chinese.sayThrowable(Chinese.java:21)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
......
メインプログラムは終了しました
ここでafterThrowingSayメソッドのパラメータタイプをNull PointerException異常に置き換えると、この切り込み点はNull PointerException異常のみに一致する
5、After強化処理
Springでは、AfterReturning強化処理と少し似ていますが、違いもあります.
6、Around強化処理
未完待続...