【发布时间】:2015-06-04 18:41:08
【问题描述】:
我有一个 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( * *(..) )")
谢谢!!
【问题讨论】:
-
您遇到什么错误?粘贴痕迹。顺便说一句,那个切入点太宽泛了,你应该考虑限制它
-
你的包真的是以
package开头的吗? -
不,是我的客户端包,com.client.project。
-
请显示完整的控制器类包括顶部的包声明,对于方面也是如此。如果它与通用切入点一起使用,那么您在切入点中的包名称使用方面犯了一个错误。
标签: java spring spring-mvc model-view-controller aop