Java SpringAOP:当配置在Servlet上下文中而不是应用程序上下文中时触发方面?
我正在使用Spring3.0.x和SpringAOP 因此,我有以下几方面: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
@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>