Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringAOP:当配置在Servlet上下文中而不是应用程序上下文中时触发方面?_Java_Spring_Spring Mvc_Aspectj_Spring Aop - Fatal编程技术网

Java SpringAOP:当配置在Servlet上下文中而不是应用程序上下文中时触发方面?

Java SpringAOP:当配置在Servlet上下文中而不是应用程序上下文中时触发方面?,java,spring,spring-mvc,aspectj,spring-aop,Java,Spring,Spring Mvc,Aspectj,Spring Aop,我正在使用Spring3.0.x和SpringAOP 因此,我有以下几方面: @Aspect public class TestAspect { @Pointcut(value="@annotation(Bar)", argNames="Bar") public void pointCutMethod(Bar bar) { } @Before(value="pointCutMethod(Bar)", argNames="Bar") public

我正在使用Spring3.0.x和SpringAOP

因此,我有以下几方面:

@Aspect
public class TestAspect {
    @Pointcut(value="@annotation(Bar)", argNames="Bar")
    public void pointCutMethod(Bar bar)
    {
    }

    @Before(value="pointCutMethod(Bar)", argNames="Bar")
    public void wrapPublishMethod(Bar bar) throws Throwable
    {
        // Do something crazy
    }
}
我有以下的课程和方法:

public class Foo {
    @Bar
    public void doSomething() {
        // do another thing
    }
}
现在,这里是我的应用程序上下文(没有AOP配置):


我正在尝试使用以下声明连接我的方面:

<aop:aspectj-autoproxy />

当我在应用程序上下文中放置
时,切入点/方面不会被触发然而,如果我将
放在servlet配置中,一切都很好,一切都正常

为什么我的上述设置在servlet上下文中使用
,而不是在应用程序上下文中使用???

编辑:

以下是相关的web.xml行:

 <servlet>
    <servlet-name>XYZ</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
                <!-- Aspect works when config line is in this file -->
        <param-value>/WEB-INF/classes/xyz-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<context-param>
    <param-name>contextConfigLocation</param-name>
        <!-- Aspect DOES NOT work when config line is in one of the files below -->
    <param-value>/WEB-INF/classes/xyz-application-context.xml, /WEB-INF/classes/xyz-aspectConfig.xml</param-value>
</context-param>

XYZ
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/classes/xyz-servlet.xml
1.
上下文配置位置
/WEB-INF/classes/xyz-application-context.xml,/WEB-INF/classes/xyz-aspectConfig.xml

servlet上下文参数旨在由
ContextLoaderListener
(如果在
web.xml
中定义)读取,而不是由
FrameworkServlet
(或其衍生工具,如
DispatchersServlet
)读取


ContextLoaderListener
将从指定为servlet上下文参数的配置位置创建根应用程序上下文(所有servlet应用程序上下文的父级)。如果servlet也会读到这一点,那么相同的bean将在servlet应用程序上下文中重新定义,而不仅仅是从父应用程序ctx继承它们。

您所说的“servlet配置”到底是什么意思?您可以发布该文件以及web.xml吗?在问题中添加了相关的web.xml行。不确定application-context.xml是什么样子,但在我将元素放在bean声明和元素之前,我遇到了类似的问题。在那之后,拦截器开始开火。那么你是如何解决这个问题的呢?我也有同样的问题
 <servlet>
    <servlet-name>XYZ</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
                <!-- Aspect works when config line is in this file -->
        <param-value>/WEB-INF/classes/xyz-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<context-param>
    <param-name>contextConfigLocation</param-name>
        <!-- Aspect DOES NOT work when config line is in one of the files below -->
    <param-value>/WEB-INF/classes/xyz-application-context.xml, /WEB-INF/classes/xyz-aspectConfig.xml</param-value>
</context-param>