首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非spring托管类中DI的编译时编织

问非spring托管类中DI的编译时编织
EN

Stack Overflow用户
提问于 2013-07-26 21:15:11
回答 2查看 3.6K关注 0票数 6

我希望为标记有@Configurable注释的类配置编译时编织,以便能够向使用new操作符实例化的类注入spring依赖项。我不想使用加载时编织,因为我不能访问应用服务器的运行脚本,所以我不能修改它。我还希望能够在测试中使用这些类,我的意思是从IDE运行测试用例。我在web和spring reference上只找到了有关加载时织入的信息,而没有找到关于编译时织入的配置的信息。

PS。我在maven中使用了spring

EN

回答 2

Stack Overflow用户

发布于 2013-07-31 18:50:52

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

我使用的设置是一个基本级别:

代码语言:javascript
复制
      <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>

现在,关于依赖关系的一些附加信息:

代码语言:javascript
复制
 <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作业来编织(这对我来说是经常发生的)。

代码语言:javascript
复制
aspectj:compile

最后,如果您打算对类进行单元测试,那么在此阶段之后编织类可能会很有用。我们在prepare-package阶段进行编织。如果您想这样做,请添加

代码语言:javascript
复制
      <executions>
                <execution>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>

添加到你的插件。

我希望这会有所帮助,因为要在IDE中很好地使用这种方法可能会很棘手。

票数 4
EN

Stack Overflow用户

发布于 2013-07-26 21:46:21

像这样的东西在你的pom里应该是有效的。

代码语言:javascript
复制
            <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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17882298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档