我想爲使用@Configurable
標註標記的類編譯編譯時間,以便能夠將彈簧依賴關係注入到由new
運算符安裝的類中。我不想使用加載時編織,因爲我無法訪問運行應用程序服務器的腳本,所以我無法修改它。另外我希望能夠在測試中使用這些類,我的意思是從IDE運行測試用例。我發現的信息僅僅是關於在web和spring引用上加載時間編織的信息,沒有關於編譯時編織的配置信息。在非彈簧管理類中編譯DI的時間編織
PS。我用彈簧與Maven
我想爲使用@Configurable
標註標記的類編譯編譯時間,以便能夠將彈簧依賴關係注入到由new
運算符安裝的類中。我不想使用加載時編織,因爲我無法訪問運行應用程序服務器的腳本,所以我無法修改它。另外我希望能夠在測試中使用這些類,我的意思是從IDE運行測試用例。我發現的信息僅僅是關於在web和spring引用上加載時間編織的信息,沒有關於編譯時編織的配置信息。在非彈簧管理類中編譯DI的時間編織
PS。我用彈簧與Maven
像這樣的事情在你的POM應該工作...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<id>compile</id>
<configuration>
<source>${source}</source>
<target>${target}</target>
<verbose>true</verbose>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<configuration>
<source>${source}</source>
<target>${target}</target>
<verbose>false</verbose>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<!-- Ensure aspectj tools version used by compiler is the same version used as dependency. Avoids warning -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
然後確保你有你的類路徑上的彈簧方面。
而且在Eclipse中aspecting - 安裝AJDT
所以對方的回答也是有效的,但我想我會在稍微詳細介紹一些這種方法的含義。
我使用的設置是在一個基本水平這一點: -
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
<configuration>
<outxmlfile>META-INF/aop.xml</outxmlfile>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
<source>1.7</source>
<target>1.7</target>
<forceAjcCompile>true</forceAjcCompile>
</configuration>
</plugin>
現在,關於依賴一些額外的信息: -
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${dep.spring}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${dep.spring}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
我想你錯過了持久性API,它用於編織。編號:https://jira.springsource.org/browse/SPR-6819春季的bug。這似乎是你需要持久性API的原因。
也有幫助可以創建一個maven作業來編織,如果在ide中unweaved類(這種情況對我來說很重要)。
aspectj:compile
最後,如果你打算進行單元測試你的類,它可以是這個階段之後編織類有用。我們編織在prepare-package
階段。如果你想這樣做添加
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
到你的插件。
我希望有幫助,因爲在IDE中使用這種方法可能會非常困難。
爲什麼我需要持久性API?我不使用它。我無法想象它如何用於織造。我假設spring-aspects中的某些方面可以與這個api一起工作,所以aspectj-maven-pluging必須有一個選項來選擇aspectjLibraries中的具體方面以用於編織過程。另外,爲什麼我需要aspectjrt依賴,我不使用加載時編織 – maks
嗨,我添加了持久性東西的jira問題。 – MikePatel
此外,方面運行時間不適用於編譯時織入。您可以通過避免cflow pointcut指示符和thisJoinPoint操作(我已閱讀)來儘量減少使用它的需要。你是否處於一種無法爲項目或其他東西引入更多依賴的情況? – MikePatel
Eclipse或IntelliJ或其他? –
我使用eclipse IDE – maks