控制器中的JavaSpringAOP
我有一个spring项目,正在尝试在控制器中实现AOP
我在applicationContext中添加这些行。xml:
<aop:aspectj-autoproxy/>
<bean id="homeController" class="package.domain.HomeController" />
<bean id="logAspect" class="package.aspect.LoggingAspect" />
我的课程是:
@Aspect
@Component
public class LoggingAspect {
protected final Log logger = LogFactory.getLog(getClass());
@Pointcut("execution( * package.web.HomeController.home(..) )")
public void poincut() {
}
@Before("poincut()")
public void before(){
System.out.println("before");
}
@AfterReturning("poincut()")
public void after(){
System.out.println("after");
}
@AfterThrowing("poincut()")
public void AfterThrowing(){
System.out.println("AfterThrowing");
}
}
我的控制器是:
@RequestMapping(value = "/home.htm")
public ModelAndView home(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
....
return new ModelAndView("home", "model", model);
}
所有人都喜欢好的,没有错误,这条信息:
DEBUG: org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory - Found AspectJ method: public void package.aspect.LoggingAspect.before()
DEBUG: org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory - Found AspectJ method: public void package.aspect.LoggingAspect.after()
DEBUG: org.springframework.aop.aspectj.annotation.ReflectiveAspectJAdvisorFactory - Found AspectJ method: public void package.aspect.LoggingAspect.AfterThrowing()
如果更改我的切入点并使用下一行,它会工作,但当我选择控制器时失败:
@Pointcut("execution( * *(..) )")
谢谢
# 1 楼答案
如果它对你有效,那么选择:
并通过在同一方面添加切入点,将你的方面限制在你的控制器上: