您的位置:首页 > 编程语言 > Java开发

Spring AOP总结

2014-12-23 11:14 309 查看
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了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: