Spring実現ブロック
この例はSpringによってスクリーンセーバ依存を実現するjarパッケージにaopalliance.jar cglib-full-2.4.2.jar comons-loging.jar spring.jarがあります.
SpringのAOP宣言式事務管理.1.いくつかの重要な概念PointCut:グループJointPoint.Springでは、いくつかの正規表現によって、JointPointが必要なPointCutを構成しています.これにより、Adviceが編成されます.Introduction:Introductionは、既に存在しているクラスの中で、このクラスを修正しないで属性と方法を増加させ、その状態と動作を増加させることができる.Target:PointCut定義の条件を満たすクラスの一つで、Adviceをこのクラスに使うことができます.多くのSpringのAOPは動的エージェントのメカニズムによって実現され、このTargetはその代理されたオブジェクトである.Proxy:Adviceを別のクラスに適用するために、例えばAound Adviceを実現するために、一つの方法の実行前後に他のコードを追加すると、実際の実現は必ず先にAdviceのコードを実行して、Targetのその方法を実行して、後にAdviceのコードを実行します.つまり、クライアントがある種類を実行する時、実際に実行されるのは、プロキシによってそのTargetに呼び出されるプロキシである.Weaving:TargetとAdviceがありますが、この二つのモジュールはいつ編まれますか?選択可能な方法はコンパイルを含む場合(特殊なコンパイラが必要です)、クラスをロードする時(特殊なクラスリーダーが必要です.)と実行する時(AOPはダイナミックにプロキシを作成して、このプロキシからTargetクラスに呼び出します.).2.Throws Adviceプロジェクトには、いくつかの処理プロセスに対して、実行中に何らかの異常が発生した場合、これらの異常な情報を記録して、データベースに保存したり、開発者にメールしたりする必要があります.上の概念の説明によって、私達は主に3つの概念に注意するべきです.Target、Advice、Proxy.
設定ファイル
Errer Bean.java
Simple Throws Advic.java
SpringのAOP宣言式事務管理.1.いくつかの重要な概念PointCut:グループJointPoint.Springでは、いくつかの正規表現によって、JointPointが必要なPointCutを構成しています.これにより、Adviceが編成されます.Introduction:Introductionは、既に存在しているクラスの中で、このクラスを修正しないで属性と方法を増加させ、その状態と動作を増加させることができる.Target:PointCut定義の条件を満たすクラスの一つで、Adviceをこのクラスに使うことができます.多くのSpringのAOPは動的エージェントのメカニズムによって実現され、このTargetはその代理されたオブジェクトである.Proxy:Adviceを別のクラスに適用するために、例えばAound Adviceを実現するために、一つの方法の実行前後に他のコードを追加すると、実際の実現は必ず先にAdviceのコードを実行して、Targetのその方法を実行して、後にAdviceのコードを実行します.つまり、クライアントがある種類を実行する時、実際に実行されるのは、プロキシによってそのTargetに呼び出されるプロキシである.Weaving:TargetとAdviceがありますが、この二つのモジュールはいつ編まれますか?選択可能な方法はコンパイルを含む場合(特殊なコンパイラが必要です)、クラスをロードする時(特殊なクラスリーダーが必要です.)と実行する時(AOPはダイナミックにプロキシを作成して、このプロキシからTargetクラスに呼び出します.).2.Throws Adviceプロジェクトには、いくつかの処理プロセスに対して、実行中に何らかの異常が発生した場合、これらの異常な情報を記録して、データベースに保存したり、開発者にメールしたりする必要があります.上の概念の説明によって、私達は主に3つの概念に注意するべきです.Target、Advice、Proxy.
設定ファイル
<project name="MyProject" default="compile" basedir=".">
<property name="sourcedir" value="${basedir}/src"/>
<property name="targetdir" value="${basedir}/build"/>
<property name="librarydir" value="${basedir}/lib"/>
<path id="libraries">
<fileset dir="${librarydir}">
<include name="*.jar"/>
</fileset>
</path>
<target name="clean">
<delete dir="${targetdir}"/>
<mkdir dir="${targetdir}"/>
</target>
<target name="compile" depends="copy-resources">
<javac srcdir="${sourcedir}"
destdir="${targetdir}"
classpathref="libraries"/>
</target>
<target name="copy-resources">
<copy todir="${targetdir}">
<fileset dir="${sourcedir}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="run" depends="clean, compile">
<java classname="SimpleThrowsAdvice" fork="true" classpathref="libraries">
<classpath path="${targetdir}"/>
</java>
</target>
</project>
Errer Bean.java
public class ErrorBean {
public void errorProneMethod() throws Exception {
throw new Exception("Foo");
}
public void otherErrorProneMethod() throws IllegalArgumentException {
throw new IllegalArgumentException("Bar");
}
}
Simple Throws Advic.java
import java.lang.reflect.Method;
import org.springframework.aop.ThrowsAdvice;
import org.springframework.aop.framework.ProxyFactory;
public class SimpleThrowsAdvice implements ThrowsAdvice {
public static void main(String[] args) throws Exception {
ErrorBean errorBean = new ErrorBean();
ProxyFactory pf = new ProxyFactory();
pf.setTarget(errorBean);
pf.addAdvice(new SimpleThrowsAdvice());
ErrorBean proxy = (ErrorBean) pf.getProxy();
try {
proxy.errorProneMethod();
} catch (Exception ignored) {
}
try {
proxy.otherErrorProneMethod();
} catch (Exception ignored) {
}
}
public void afterThrowing(Exception ex) throws Throwable {
System.out.println("***");
System.out.println("Generic Exception Capture");
System.out.println("Caught: " + ex.getClass().getName());
System.out.println("***
");
}
public void afterThrowing(Method method, Object[] args, Object target,
IllegalArgumentException ex) throws Throwable {
System.out.println("***");
System.out.println("IllegalArgumentException Capture");
System.out.println("Caught: " + ex.getClass().getName());
System.out.println("Method: " + method.getName());
System.out.println("***
");
}
}