Я использую Spring 3.0.x с Spring AOP.
Итак, у меня есть следующий аспект:
@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):
<bean id="testAspect" class="org.xyz.TestAspect" />
<bean id="foo" class="org.xyz.Foo" />
Я пытаюсь связать свой аспект, используя следующее объявление:
<aop:aspectj-autoproxy />
Когда я помещаю <aop:aspectj-autoproxy />
в контекст приложения, точка / аспект не запускается. Однако , если я добавлю <aop:aspectj-autoproxy />
в конфигурацию моего сервлета, все будет хорошо, и все будет работать.
Почему мои настройки выше работают с <aop:aspectj-autoproxy />
в контексте сервлета, но не в контексте приложения ???
EDIT:
Вот соответствующие строки 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>