zoukankan      html  css  js  c++  java
  • spring aop 如何切面到mvc 的controller--转载

    原文:http://yjian84.iteye.com/blog/1920787

    网上搜罗半天,不知道什么原因,看了源码,好像他们说的controller 是不受代理的,也对哈,不知道怎么办,于是在http://stackoverflow.com/questions/17834958/spring-aop-is-not-working-in-with-mvc-structure?rq=1 这个地方有个人说了: 

    <context:component-scan base-package="com.dao" /> 
    <mvc:annotation-driven/> 

    <aop:aspectj-autoproxy />   
    from application-context.xml to controller-servlet.xml? 

    The aspects and the beans to be applied needs to be in the same ApplicationContext but ApplicationContext is not aware of WebApplicationContext . 


    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上了。 

    spring-mvc.xml 

        <context:component-scan base-package="com.cms.controller" />
        <context:component-scan base-package="com.cms.aspectj" />
        <!-- <bean id="sysLogAspectJ" class="com.cms.aspectj.SysLogAspectJ" /> -->
        <aop:aspectj-autoproxy proxy-target-class="true">
        <!--     <aop:include name="sysLogAspectJ" /> -->
        </aop:aspectj-autoproxy>
        <!-- <mvc:annotation-driven /> -->
        <bean
            class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
        <bean
            class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
    package com.cms.aspectj;
    
    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;
    
    @Component
    @Aspect
    public class SysLogAspectJ {
    
        @Pointcut("within(@org.springframework.stereotype.Controller *)")
        public void cutController(){
            
        }
        
        @Around("cutController()")
        public Object recordSysLog(ProceedingJoinPoint point) throws Throwable{
            System.out.println("lfkdjj================================================================");
            return point.proceed();
        }
        
        
        
    }
  • 相关阅读:
    SQLSERVER 2012之AlwaysOn -- 一次硬件升级引发的问题
    SQLSERVER 2012之AlwaysOn -- 同步模式下的网卡性能优化
    Replication的犄角旮旯(九)-- sp_setsubscriptionxactseqno,赋予订阅活力的工具
    关于X锁的问题--由select+X锁是否持有到事务结束的误区
    SQLServer 2012之AlwaysOn —— 指定数据同步链路,消除网络抖动导致的提交延迟问题
    Replication的犄角旮旯(八)-- 订阅与发布异构的问题
    Replication的犄角旮旯(七)-- 一个DDL引发的血案(下)(聊聊logreader的延迟)
    JavaScript 学习笔记 -- String.trim + format
    SQL笔记
    SQL笔记
  • 原文地址:https://www.cnblogs.com/davidwang456/p/4121765.html
Copyright © 2011-2022 走看看