簡體   English   中英

控制器中的Spring AOP

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM