Spring3.0におけるAOP配法


第1の構成方法:@aspectjラベルを使用する
  • プロファイルに注釈
  • javaファイルを作成し、@aspect注記を使用してクラス
  • を修飾します.
  • @before、@after、@aroundなどを使用して修飾するメソッドを作成し、注記に切り込み点の式
  • を書きます.
    説明:上記javaファイルを作成したらspringのコンテナで宣言する必要があります.プロファイルでノードを定義したり、@componentコンポーネントを使用して修飾したりできます.
    例:
    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の構成方法:プロファイルベースの構成
  • javaファイルを作成し、0以上のパラメータ
  • を持つブロックを実行する方法を指定します.
  • springプロファイルにjavaクラスをbean
  • として登録
  • などのラベルを使用して構成する
  • .
    例:javaファイル
    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」を参照