使用AspectJ的Spring @Configurable注释

时间:2016-10-06 12:08:03

标签: spring maven spring-aop spring-transactions compile-time-weaving

无法使用Aspectj编译我的项目。 Apache CXF ResourceContext.getResource(SomeClass.class)创建了一个简单的对象而不是Spring管理的对象,这是一个问题。所以我想用编织和@Configurable来克服这种困难。我让它在我的测试Spring Boot应用程序中工作(如果需要,我可以在Github上提供一个链接),使用@Configurable本身和@EnableSpringConfigured进行以下设置:

这是我的pom.xml的快照(Spring版本是4.3.3.RELEASE):

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring.version}</version>
</dependency>

aspectj-maven-plugin插件配置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.8</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
        <complianceLevel>1.8</complianceLevel>
        <showWeaveInfo>true</showWeaveInfo>
        <aspectLibraries>
            <aspectLibrary>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
            </aspectLibrary>
        </aspectLibraries>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>compile</goal>
            </goals>
        </execution>
    </executions>
</plugin>

然而,当我尝试在我公司的真实项目中应用上述配置时,我得到了这个奇怪的错误:

[ERROR] *path to the java file being weaving* can't determine annotations of missing type javax.transaction.Transactional
[ERROR] when weaving type *the full java class name*
[ERROR] when weaving classes
[ERROR] when weaving
[ERROR] when batch building BuildConfig[null] #Files=27 AopXmls=#0
[ERROR] [Xlint:cantFindType]
[ERROR] error at (no source information available)

我的测试项目并没有使用@Transactional,但真正的测试项目没有。所以我尝试添加spring-txpersistence-api依赖项,但没有任何效果。最后一点:第二次运行mvn install时,项目建立成功,每次运行mvn clean install时都失败。

我非常感谢任何帮助,因为我真的遇到了这个错误。

1 个答案:

答案 0 :(得分:2)

将以下依赖项添加到类路径应解决此问题:

<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>javax.transaction-api</artifactId>
    <version>1.2</version>
    <scope>provided</scope>
</dependency>