2012-06-13 27 views
1

對於使用Spring AOP的獨立Java應用程序,是否有必要要求諸如-javaagent:pathto/aspectjweaver.jar的JVM參數「啓用」AOP支持?你想要什麼時候或需要這樣做?Spring AOP加載時編織是否需要JVM參數?

要明確,「獨立」意味着一個Maven構建的,可執行的.jar;這將在各種平臺上調用。

回答

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> 

如果這還不夠,你需要加載時織告知內部豆呼籲例子,那麼你需要添加一個JVM參數作爲在春節描述3.0文檔:

通用Java應用程序

您可以啓用LTW在任何Java應用程序(基於獨立以及應用服務器)通過使用Spring提供的檢測代理Spring的支持。爲此,通過指定-javaagent:path/to/spring-agent.jar選項來啓動VM。請注意,這需要修改VM啓動腳本,這可能會阻止您在應用程序服務器環境中使用此腳本(具體取決於您的操作策略)。

看到這裏http://static.springsource.org/spring/docs/3.0.0.RC2/reference/html/ch07s08.html#aop-aj-ltw-environments

1

通常,將weaver jar包含在classpath中就足夠了。

4

考慮使用編譯時通過行家編織:

<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的情況下,甚至是私人事務方法。

相關問題