我使用以下结构但失败但未能创建代理调用。
在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()没有被调用。有人可以帮我解决这个问题。
答案 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/