当前位置: 代码迷 >> VC/MFC >> spring aop 怎么切面到mvc 的controller, service
  详细解决方案

spring aop 怎么切面到mvc 的controller, service

热度:159   发布时间:2016-05-02 03:24:12.0
spring aop 如何切面到mvc 的controller, service
Spring+SpringMVC+Mybatis 利用AOP自定义注解实现可配置日志快照记录 http://unkeltao.com/blog/2014/07/22/spring-plus-springmvc-plus-mybatis-aop/
基于注解的Spring AOP的配置和使用  http://my.oschina.net/sniperLi/blog/491854





拦截Controller
http://yjian84.iteye.com/blog/1920787

Indeed your controller (annotated by @Controller) and your aspects (annotated by @Aspect) should be in the same Spring context.

Usually people define their controllers in the dispatch-servlet.xml or xxx-servlet.xml and their service beans (including the aspects) in the main applicationContext.xml. It will not work.

When Spring initializes the MVC context, it will create a proxy for your controller but if your aspects are not in the same context, Spring will not create interceptors for them.


这个人说的好像很对啊。我把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@Componentpublic 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@Componentpublic 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();    }}
  相关解决方案