0
我定義了一個看點及其在應用程序的context.xml這樣的配置:切入點
<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>
而且我的servlet-context.xml中看起來是這樣的:
<context:annotation-config />
<context:component-scan base-package="mypackage" />
我的春天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的,除非我的servlet-context.xml中添加以下(進口根上下文)是這樣的:
<import resource="classpath:application-context.xml"/ >
有人能告訴我這是爲什麼發生的? Spring中通過上下文層次結構不是包含Aspect,PointCut和Advice在內的所有bean都自動提供給Controller嗎?
您使用的是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 行家編譯-插件 \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