有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

控制器中的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) 个答案

  1. # 1 楼答案

    如果它对你有效,那么选择:

    @Pointcut("execution( * *(..) )")
    

    并通过在同一方面添加切入点,将你的方面限制在你的控制器上:

    @Pointcut("within(@package.web.HomeController *)")
    public void controllerBean() {}