Spring AOP总结

1.切面bean

package com.web.aop;

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

/**
 *
 * @see		
 * @author  xuxile
 * @date	2014-12-23 上午9:18:58
 * @version	 
 * @desc    TODO
 */
/** 
 * 日志切面 
 * 
 */  
public class logAspect {  
  
    public void afterMethod(JoinPoint jp) {  
        System.out.println("后置通知: "  
                + jp.getTarget().getClass().getName() + "."  
                + jp.getSignature().getName());  
    }  
  
    public Object aroundMethod(ProceedingJoinPoint pjp) throws Throwable {  
        long time = System.currentTimeMillis();  
        Object retVal = pjp.proceed();  
        time = System.currentTimeMillis() - time;  
        System.out.println("环绕通知: " + time + " ms");  
        return retVal;  
    }  
  
    public void beforeMethod(JoinPoint jp) {  
        System.out.println("前置通知: "  
                + jp.getTarget().getClass().getName() + "."  
                + jp.getSignature().getName());  
    }  
  
    public void throwingMethod(JoinPoint jp, Throwable ex) {  
        System.out.println("异常通知:" + jp.getTarget().getClass().getName()  
                + "." + jp.getSignature().getName() + " throw exception");  
        System.out.println(ex.getMessage());  
    }  
}   
2.在applicationContext.xml配置AOP

<span style="color:#006600;"><!-- 配置切面bean -->
	<bean id="logAspect" class="com.web.aop.logAspect"/>
	<!-- 配置AOP -->
	<aop:config>
	  <!-- 配置切点表达式 -->
	  <aop:pointcut expression="execution(* com.web.service.impl.*.*(..))" id="pointcut"/>
	  <!-- 配置切面及通知 -->
	  <aop:aspect ref="logAspect" order="1">
	     <aop:before method="beforeMethod" pointcut-ref="pointcut"/>
	     <aop:after method="afterMethod" pointcut-ref="pointcut"/>
	     <aop:around method="aroundMethod" pointcut-ref="pointcut"/>
	     <!-- 异常通知中的throwing名称必须与切面bean中的异常参数名称一致 -->
	     <aop:after-throwing method="throwingMethod" pointcut-ref="pointcut" throwing="ex"/>
	  </aop:aspect>
	</aop:config></span>

3.AOP流程解释

当controller中调用serviceIml中的方法时,AOP生效。

注意:当我们用aop切controller这样就不生效了,原因是因为项目启动时我们spring MVC加载的是dispatcher-servlet.xml,我们只需要将上面2的配置移动到dispatcher-servlet.xml我们就能切controller了!

你可能感兴趣的:(spring,AOP,许喜乐)