【使用Spring AOP无法对controller类方法增强 _aop 】 | IT修真院·坑乎
问题已收录 使用Spring AOP无法对controller类方法增强
我也踩过这个坑( 1 )
已统计您的踩坑,无需重复点击
回答(2)
aop
详细描述
源码
编辑于2024-11-19
  • [散修弟子]JAVA-3808
    0

    我猜你是有一个applicationContext.xml和一个springMVC的配置文件,貌似controller的aop在springMVC的配置文件中配估计就好了,原因我没深究

    编辑于2018-06-27
  • [武汉|结业弟子]JAVA-李伟明
    0

    嗯,是这样解决的。

    主要原因与服务器启动时Webapp的web.xml中配置的加载顺序有关:

        启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点。

        紧接着,容器创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文。

        容器将<context-param>转换为键值对,并交给servletContext。

        容器创建<listener>中的类实例,创建监听器。


        加载顺序是:ServletContext -> context-param -> listener -> filter -> servlet


        1. Spring是listener ,因此其配置文件会先于Spring mvc的servlet加载。

        2. 执行Spring配置文件后,Spring会创建一个WebApplicationContext上下文,称为父上下文(父容器);spring mvc可以同时配置多个,每个 DispatcherServlet有一个自己的上下文对象(WebApplicationContext),称为子上下文(子容器)。

        3. 子上下文可以访问父上下文中的内容,但父上下文不能访问子上下文中的内容。

        4. 因此父容器中的<aop:aspectj-autoproxy/> 不能作用到子容器扫描的Controller。


    编辑于2018-06-28