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.
 
設定ファイル
<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("***
"); } }