Spring AOP不适用于MVC结构

时间:2013-07-24 13:08:06

标签: java spring-mvc aop spring-aop

我使用以下结构但失败但未能创建代理调用。

在controller-servlet.xml中

<context:component-scan base-package="com.controller" />
    <mvc:annotation-driven/>
    <mvc:resources mapping="/static/**" location="/static/" />    
    <mvc:default-servlet-handler/>

在application-context.xml中

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

    <aop:aspectj-autoproxy />   

    <!-- Aspect Bean Definition 
    <bean id="aspectBean" class="com.common.AspectImple" /> -->

Aspect类

package com.common;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class AspectImple {


    @Before("execution(* com.controller.JobController.*(..))")
        public void beforeImpl() {
           System.out.println("  Before Done ");
    }

}

控制器类

@Controller
    public class JobController {

        @RequestMapping(method = RequestMethod.GET, value = "/xyz")
        public ModelAndView abc(HttpServletRequest request,
            HttpServletResponse response) {
            ...
            m1(10);
            ...
            }
    }

    public void m1(int i){
        System.out.println(" AOP Done ");
    } 

AOP无法正常工作,并且在调用abc(..)&amp; m1(..)方法,beforeImpl()没有被调用。有人可以帮我解决这个问题。

3 个答案:

答案 0 :(得分:5)

移动怎么样

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

<aop:aspectj-autoproxy />   

从application-context.xml到controller-servlet.xml?

要应用的方面和bean需要位于同一个ApplicationContext中,但ApplicationContext不知道WebApplicationContext。

答案 1 :(得分:2)

我遇到了同样的问题,但我正在使用基于注释的配置。为了让AOP为@Controller工作,这就是诀窍:

@Configuration
@EnableAspectJAutoProxy(proxyTargetClass=true)
@ComponentScan(basePackages = {"com.mypackage"})
public class MvcConfig extends WebMvcConfigurationSupport
{
    ...

    @Bean
    public MyAspect myAspect()
    {
        return new MyAspect();
    }

}

答案 2 :(得分:0)

关于注释控制器的Spring AOP建议 - 是一个很好的答案 http://mergetag.com/spring-aop-advice-on-annotated-controllers-2/