Spring aopの実現方式



 1.xml構成に基づくspring aop
 2.注記構成に基づくaop
 
 
AOPでよく用いられる実装方式は,宣言方式(XMLベース)と注釈方式(AspectJベース)の2つである.
まずAOPの重要な概念を復習します.
Joinpoint(接続点):プログラム実行時の特定のポイントでありSpringではメソッドの実行である.Pointcut(接点):一般的な点として、springにおけるAOPの接点はいくつかの方法の集合を指し、これらの方法は強化され、エージェントされる必要がある.一般的には、正規表現など、一定の規則に従って表されます.接点は接続点のクラスから構成されます. Advice(通知):やはり通俗的な点というか、指定の接点で何をするかです. Advisor(通知器):実は接点と通知の結合です.
一、XML構成に基づくSpring AOP
宣言方式で実装(XMLファイルで構成)し、大まかな手順は、プロファイルでpointcutを構成し、javaで実際のaspectクラスを記述し、切り込み点に関連する業務処理を行う.
 
うどん類:
package com.spring.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;

public class AopAspect {
    
    /**
     *     :             
      * @param jp
     */
    public void doBefore(JoinPoint jp){
        System.out.println("===========      ============");
    }
    
    /**
     *       :              
      *                    
      * @param jp
     * @param result
     */
    public void doAfterReturning(JoinPoint jp,String result){
        System.out.println("===========      ============");
        System.out.println("   result==================="+result);
    }
    
    /**
     *     :             (               )
      *            ,            
      * @param jp
     */
    public void doAfter(JoinPoint jp){
        System.out.println("===========      ============");
    }
    
    /**
     * 
     *     :              
      *          
      * @param jp
     * @param ex
     */
    public void doAfterThrowing(JoinPoint jp,Exception ex){
        System.out.println("===========      ============");
    }
    
    /**
     *     :             ,                 。
      *        (join point)   。                            。
      *      proceed()          ,               。
      * 
     *                :ProceedingJoinPoint                 。
      *             ,             
      * @param pjp
     * @return
     * @throws Throwable
     */
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable{
        System.out.println("======        =========");
         //        
        Object[] args = pjp.getArgs();
        //       
        String method = pjp.getSignature().getName();
        //       
        Object target = pjp.getTarget();
        //          
        //   proceed()  ,           
        Object result=pjp.proceed();
        System.out.println("  ,   :" + method + ";    :" + target + ";   :" + result);
        System.out.println("======        =========");
        return result;
    }
}

 
 
    <bean id="aspectBean" class="com.spring.aop.AopAspect" />

    <aop:config>
     <aop:aspect ref="aspectBean">
        <aop:pointcut id="pointcut" expression="execution(* com.spring.service.impl.UserManagerServiceImpl..*(..))"/>
        
        <aop:before method="doBefore" pointcut-ref="pointcut"/> 
        <aop:after-returning method="doAfterReturning" pointcut-ref="pointcut" returning="result"/>
        <aop:after method="doAfter" pointcut-ref="pointcut" /> 
        <aop:around method="doAround" pointcut-ref="pointcut"/> 
        <aop:after-throwing method="doAfterThrowing" pointcut-ref="pointcut" throwing="ex"/>
      aop:aspect>
   aop:config>

 
 注記:

    <aop:aspectj-autoproxy/>   

 
@Aspect
public class AopAspectJ {
    
    /**  
     *    final String   ,                     
     */  
    public static final String EDP="execution(* com.spring.service.impl.UserManagerServiceImpl..*(..))";
    
    /**
     *                     
      *             
      * @param jp
     */
    @Before(EDP)
    public void doBefore(JoinPoint jp){
        
        System.out.println("=========      ==========");
    }
    
    
    /**
     *                       
      *                   returning 
     * @param jp
     * @param result
     */
    @AfterReturning(value=EDP,returning="result")
    public void doAfterReturning(JoinPoint jp,String result){
        System.out.println("===========      ============");
    }
    
    /**
     *     :             (               )
      * @param jp
     */
    @After(value=EDP)
    public void doAfter(JoinPoint jp){
        System.out.println("===========      ============");
    }
    
    /**
     *     :             ,                 。
      * @param pjp
     * @return
     * @throws Throwable
     */
    @Around(EDP)
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable{

        System.out.println("======        =========");
        //        
        Object[] args = pjp.getArgs();
        //       
        String method = pjp.getSignature().getName();
        //       
        Object target = pjp.getTarget();
        //          
        //   proceed()  ,           
        Object result=pjp.proceed();
        System.out.println("  ,   :" + method + ";    :" + target + ";   :" + result);
        System.out.println("======        =========");
        return result;
    }
    
    /**
     *             ,             
      * @param jp
     * @param ex
     */
    @AfterThrowing(value=EDP,throwing="ex")
    public void doAfterThrowing(JoinPoint jp,Exception ex) {
        System.out.println("===========      ============");
    }
}