我想为标记有@Configurable注释的类配置编译时编织,以便能够将spring依赖项注入(inject)到用new运算符实例化的类中。我不想使用加载时编织,因为我无权运行应用程序服务器的脚本,因此无法对其进行修改。我也希望能够在测试中使用此类,我的意思是从IDE运行测试用例。我只在Web和spring引用上找到有关加载时间编织的信息,而没有关于编译时编织的配置的信息。

PS。我和Maven一起使用spring

最佳答案

因此,另一个答案也是有效的,但我想我会更详细地介绍这种方法的一些含义。

我使用的设置基本是这样的:

      <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。

编辑:在 Spring 与https://jira.springsource.org/browse/SPR-6819错误有关。这似乎就是为什么需要持久性API的原因。

如果在IDE中取消编织类,则可以创建一个编织的Maven作业(这对我来说很常见),这也很有帮助。
aspectj:compile

最后,如果打算对类进行单元测试,则在此阶段之后编织类可能会很有用。我们编织在prepare-package阶段。如果您想这样做,请添加
      <executions>
                <execution>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>

到您的插件。

我希望能有所帮助,因为要使这种方法在IDE中发挥出色效果可能会很棘手。

关于spring - 在非 Spring 托管类中为DI编译时间编织,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17882298/

10-10 14:34