對於使用Spring AOP的獨立Java應用程序,是否有必要要求諸如-javaagent:pathto/aspectjweaver.jar
的JVM參數「啓用」AOP支持?你想要什麼時候或需要這樣做?Spring AOP加載時編織是否需要JVM參數?
要明確,「獨立」意味着一個Maven構建的,可執行的.jar;這將在各種平臺上調用。
對於使用Spring AOP的獨立Java應用程序,是否有必要要求諸如-javaagent:pathto/aspectjweaver.jar
的JVM參數「啓用」AOP支持?你想要什麼時候或需要這樣做?Spring AOP加載時編織是否需要JVM參數?
要明確,「獨立」意味着一個Maven構建的,可執行的.jar;這將在各種平臺上調用。
這取決於。如果您使用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>
如果這還不夠,你需要加載時織告知內部豆呼籲例子,那麼你需要添加一個JVM參數作爲在春節描述3.0文檔:
通用Java應用程序
您可以啓用LTW在任何Java應用程序(基於獨立以及應用服務器)通過使用Spring提供的檢測代理Spring的支持。爲此,通過指定-javaagent:path/to/spring-agent.jar選項來啓動VM。請注意,這需要修改VM啓動腳本,這可能會阻止您在應用程序服務器環境中使用此腳本(具體取決於您的操作策略)。
通常,將weaver jar包含在classpath中就足夠了。
考慮使用編譯時通過行家編織:
<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的情況下,甚至是私人事務方法。