Spring AOP总结

来源:互联网 发布:网红淘宝店前十名男装 编辑:程序博客网 时间:2024/06/06 20:12

1.切面bean

package com.web.aop;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;/** * * @see * @author  xuxile * @date2014-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了!

0 0
原创粉丝点击