我已经将AspectJ CTW添加到项目中,并且(看起来)可以很好地工作。我可以在测试中运行代码,它表明AspectJ正在拦截适当的方法。一旦我打包代码并在WAR中将其部署到Tomcat,它就不再有效了。
我尝试过很多不同的东西,但似乎都没有。我正在使用Maven 2中的Maven插件,我正在使用AspectJ的注释。构建中的所有反馈表明它正在寻找方法和编织。
为什么它一旦部署到Tomcat就会停止工作?
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.3</version>
<configuration>
<complianceLevel>1.6</complianceLevel>
<source>1.6</source>
<target>1.6</target>
<showWeaveInfo>true</showWeaveInfo>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
答案 0 :(得分:1)
对我的修复是将我的call()切入点转为执行()。
作为AspectJ的首次使用者,我点击了我的第一个“陷阱”,它实际上直接列在他们的常见问题解答中。通过反射调用的代码不会触发call()切入点。
http://www.eclipse.org/aspectj/doc/released/faq.php#q:reflectiveCalls
问题在于,在Web应用程序中,通过反射调用了一段有趣的代码。在测试中,它工作正常,因为直接调用类和方法。因此,测试工作正常但一旦部署就没有用。
该问题与Tomcat或部署无关。