对于使用Spring AOP的独立Java应用程序,是否需要-javaagent:pathto/aspectjweaver.jar
等JVM参数来“打开”AOP支持?您何时需要或需要这样做?
要清楚,“独立”是指Maven制造的,可加工的.jar;将在各种平台上调用。
答案 0 :(得分:4)
这取决于。如果你使用Spring AOP只进行粗粒度拦截(意味着你只想拦截对bean的外部调用,而不是拦截bean内部的调用),则根本不需要JVM参数。只需使用以下代码:
<bean id="myInterceptor" class="com.company.interceptors.MyInterceptor"></bean>
<aop:config>
<aop:pointcut id="myPointcut"
expression="execution(* com.company.services..MyService.*(..))" />
<aop:advisor pointcut-ref="myPointcut"
advice-ref="myInterceptor" />
</aop:config>
如果这还不够,并且您需要加载时编织来建议bean内调用,那么您需要添加一个JVM参数,如Spring 3.0文档中所述:
通用Java应用程序
通过使用Spring提供的检测代理,您可以在任何Java应用程序(独立应用程序和基于应用程序服务器)中启用Spring对LTW的支持。为此,请通过指定-javaagent:path / to / spring-agent.jar选项来启动VM。请注意,这需要修改VM启动脚本,这可能会阻止您在应用程序服务器环境中使用它(取决于您的操作策略)。
答案 1 :(得分:4)
考虑通过maven使用编译时编织:
<properties>
<aspectj.version>1.6.12</aspectj.version>
</properties>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
<configuration>
<source>1.7</source>
<target>1.7</target>
<complianceLevel>1.7</complianceLevel>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
这样做涵盖了所有疯狂的Spring AOP案例,甚至包括私有交易方法。
答案 2 :(得分:1)
在此处查看更多文档http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/aop.html#aop-aj-ltw。这取决于。
答案 3 :(得分:0)
通常,只需在类路径中包含weaver jar即可。