[英]Spring AOP in controllers
我有一個春季項目,正在嘗試在控制器中實現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( * *(..) )")
謝謝!!
如果對您有用,請繼續:
@Pointcut("execution( * *(..) )")
並通過同一方面中的其他切入點將方面限制為您的控制器:
@Pointcut("within(@package.web.HomeController *)")
public void controllerBean() {}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.