Я определяю Aspect и его конфигурации в прикладном context.xml, как это:Pointcut не срабатывают в Spring Controller
<aop:aspectj-autoproxy proxy-target-class="true"/>
<bean id="myAspect" class="myAspectClass"/>
<aop:config>
<aop:aspect ref="myAspect">
<aop:pointcut id="myPointCut" expression="(@within(MyPointCutAnnotation) or @annotation(MyPointCutAnnotation)) and execution(* *(..))"/>
<aop:before pointcut-ref="myPointCut" method="beforeMethod" />
</aop:aspect>
</aop:config>
И мой сервлет-context.xml выглядит примерно так:
<context:annotation-config />
<context:component-scan base-package="mypackage" />
класс
My Spring Controller:
@Controller
@RequestMapping(value="/xxx", method=RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE)
public class MyController {
@MyPointCutAnnotation
@ResponseBody
@RequestMapping(value="/signOn")
public void myMethod() {
...do something
}
}
Файл web.xml выглядит следующим образом:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Но myPointCut не получить срабатывает для MyMethod, если я не добавить следующее (импортируя корневой контекст) в сервлет-context.xml так:
<import resource="classpath:application-context.xml"/ >
Может кто-нибудь сказать мне, почему это происходит ? Не все бобы, включая Aspect, PointCut и Advice, автоматически становятся доступными в контроллере к весне через контекстную иерархию?
Вы используете maven? если да, можете ли вы поделиться частью тега сборки pom.xml? Может быть, вам нужно добавить aspectj builder для вашего pom.xml. – nsylmz
Да, я использую Maven, вот моя сборка тег часть: ' \t \t \t \t \t <- Использование Java 1.6 вместо стандартного 1.5 в качестве источника/цели для \t \t \t \t JAVAC! компилятор -> \t \t \t \t \t \t \t Maven-компилятора плагин \t \t \t \t <Конфигурация> \t \t \t \t \t \t \t \t \t \t $ {javase.version} \t \t \t \t \t UTF-8 \t \t \t \t configurati на> \t \t \t \t \t \t ' –
jl276
Я не знаком с AspectJ строителя. Для чего и как это может помочь решить проблему? – jl276