csuzxm000 2015-11-13
Spring+SpringMVC+Mybatis利用AOP自定义注解实现可配置日志快照记录http://unkeltao.com/blog/2014/07/22/spring-plus-springmvc-plus-mybatis-aop/
基于注解的SpringAOP的配置和使用http://my.oschina.net/sniperLi/blog/491854
Spring中的AOP(五)——在Advice方法中获取目标方法的参数http://my.oschina.net/itblog/blog/211693,这里有aop的更多知识
拦截Controller
http://yjian84.iteye.com/blog/1920787
Indeedyourcontroller(annotatedby@Controller)andyouraspects(annotatedby@Aspect)shouldbeinthesameSpringcontext.
Usuallypeopledefinetheircontrollersinthedispatch-servlet.xmlorxxx-servlet.xmlandtheirservicebeans(includingtheaspects)inthemainapplicationContext.xml.Itwillnotwork.
WhenSpringinitializestheMVCcontext,itwillcreateaproxyforyourcontrollerbutifyouraspectsarenotinthesamecontext,Springwillnotcreateinterceptorsforthem.
这个人说的好像很对啊。我把aspectj和springmvc的配置文件放到一起就可以用到controller上了。
在servlet.xml加入
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
sysLogAspectJ
package com.pandy.core.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; /** * 项目名称: wp_idea_linux * 功能说明: 在servlet.xml配置: <aop:aspectj-autoproxy proxy-target-class="true" /> * 创建者: Pandy, * 邮箱: [email protected], [email protected] * 版权: * 官网: * 创建日期: 15-11-13. * 创建时间: 下午9:42. * 修改历史: * ----------------------------------------------- */ @Aspect @Component public class ControllerLogAspect { @Pointcut("within(@org.springframework.stereotype.Controller *)") public void cutController(){ } @Around("cutController()") public Object recordSysLog(ProceedingJoinPoint point) throws Throwable{ System.out.println("=================================ControllerLogAspect执行方法2"); return point.proceed(); } }
拦截Service等
在applicationContext.xml(扫描service的类的配置文件)加入
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
package com.pandy.core.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; /** * 项目名称: wp_idea_linux * 功能说明: 在applicationContext.xml(扫描service的配置文件)配置: <aop:aspectj-autoproxy proxy-target-class="true" /> * 创建者: Pandy, * 邮箱: [email protected], [email protected] * 版权: * 官网: * 创建日期: 15-11-13. * 创建时间: 下午9:42. * 修改历史: * ----------------------------------------------- */ @Aspect @Component public class ServiceLogAspect { @Pointcut("within(@org.springframework.stereotype.Service *)") public void cutService(){ } @Around("cutService()") public Object recordSysLog(ProceedingJoinPoint point) throws Throwable{ System.out.println("=================================ServiceLogAspect执行方法2"); return point.proceed(); } }