Spring3.0におけるAOP配法
第1の構成方法:@aspectjラベルを使用する
説明:上記javaファイルを作成したらspringのコンテナで宣言する必要があります.プロファイルで
import org.aspectj.lang.proceedingjoinpoint;import org.aspectj.lang.annotation.after;import org.aspectj.lang.annotation.afterthrowing;import org.aspectj.lang.annotation.around;import org.aspectj.lang.annotation.aspect;import org.aspectj.lang.annotation.before;import org.springframework.stereotype.component;/** * aop * @author zywang 2011-3-24 */@component@aspectpublic class aoplog { // @before("execution (* com.zywang.services.impl.*.*(..))") public void before() { system.out.println("before"); } // @after("execution (* com.zywang.services.impl.*.*(..))") public void after() { system.out.println("after"); } // @around("execution (* com.zywang.services.impl.*.*(..))") public object around(proceedingjoinpoint point) throws throwable{ system.out.println("begin around"); object object = point.proceed(); system.out.println("end around"); return object; } // @afterthrowing(pointcut = "execution (* com.zywang.services.impl.*.*(..))",throwing = "ex") public void afterthrowing(exception ex){ system.out.println("afterthrowing"); system.out.println(ex); }}
上記のコードでは、繰り返しの切り込み点が複数回使用されています.この場合、@pointcut寸法を使用して、パラメータやメソッドボディを必要としない切り込み点メソッドを変更し、@beforeなどの寸法で切り込み点として参照できます.例は、import org.aspectj.lang.proceedingjoinpoint;import org.aspectj.lang.annotation.around;import org.aspectj.lang.annotation.aspect;import org.aspectj.lang.annotation.before;import org.aspectj.lang.annotation.pointcut;import org.springframework.stereotype.component;/** * aop * @author zywang 2011-3-24 */@component@aspectpublic class aoplog { @pointcut("execution (* com.iflysse.school.services.impl.*.*(..))") public void pointcut(){} // @before("pointcut()") public void before() { system.out.println("before"); } // @around("pointcut()") public object around(proceedingjoinpoint point) throws throwable{ system.out.println("begin around"); object object = point.proceed(); system.out.println("end around"); return object; }}
第2の構成方法:プロファイルベースの構成
import org.aspectj.lang.proceedingjoinpoint;/** * aop * @author zywang 2011-3-24 */public class aoplog { // public object runonaround(proceedingjoinpoint point) throws throwable{ system.out.println("begin around"); object object = point.proceed(); system.out.println("end around"); return object; } }
springプロファイル <bean id="aoplog" class="com.iflysse.school.aop.aoplog"></bean> <aop:config> <aop:aspect ref="aoplog"> <aop:around method="runonaround" pointcut="execution (* com.zywang.services.impl.*.*(..))"/> </aop:aspect> </aop:config>
注:この例では、javaクラスのメソッドにproceedingjoinpointタイプのパラメータが必要なaround方式のブロックを使用します.
第2の方式のaop構成を用いて、eclipse(springideプラグインあり)でブロックされた方法に識別表示がある
以上の構成はspring 3.0に基づく.5設定を行い、「reference documentation」を参照