我希望为标记有@Configurable注释的类配置编译时编织,以便能够向使用new操作符实例化的类注入spring依赖项。我不想使用加载时编织,因为我不能访问应用服务器的运行脚本,所以我不能修改它。我还希望能够在测试中使用这些类,我的意思是从IDE运行测试用例。我在web和spring reference上只找到了有关加载时织入的信息,而没有找到关于编译时织入的配置的信息。
PS。我在maven中使用了spring
发布于 2013-07-31 18:50:52
因此,另一个答案也是有效的,但我认为我应该更详细地介绍这种方法的一些含义。
我使用的设置是一个基本级别:
<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的原因。
同样有用的是,如果ide中的类被拆分,创建一个maven作业来编织(这对我来说是经常发生的)。
aspectj:compile最后,如果您打算对类进行单元测试,那么在此阶段之后编织类可能会很有用。我们在prepare-package阶段进行编织。如果您想这样做,请添加
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>添加到你的插件。
我希望这会有所帮助,因为要在IDE中很好地使用这种方法可能会很棘手。
发布于 2013-07-26 21:46:21
像这样的东西在你的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>然后确保在你的类路径上有spring-aspects。
对于Eclipse中的面向方面,请安装AJDT
https://stackoverflow.com/questions/17882298
复制相似问题