如何禁用Spring的JpaExceptionTranslatorAspect

时间:2013-12-17 17:39:50

标签: spring aspectj

我正在从Spring 2.5.6迁移到3.2.5。 jar spring-aspects-3.2.5包含新方面JpaExceptionTranslatorAspect,它将标准JPA异常转换为Spring异常。 It seems to be a Roo-specific aspect。这个方面会自动编织到存储库中(使用@Repository注释)。因此,标准JPA异常不再被捕获并且应用程序被破坏。

如何排除JpaExceptionTranslatorAspect的编织?如果无法完成,还有其他解决方法吗?或者我错过了一些配置?

我正在使用AspectJ 1.7.4和AspectJ Maven插件1.4。

我已收集的内容:

但是,我想知道这些信息是否是最新的。

2 个答案:

答案 0 :(得分:9)

首先,将aspectj-maven-plugin升级到1.5,并在插件配置中添加complianceLevel标记(否则默认情况下会尝试使用java 1.4兼容性进行编译)。 然后,您可以通过aspectj-maven-plugin的xmlConfigured属性指定排除项。此属性引用本地目录中的文件(即pom.xml所在的位置)

pom.xml例子:

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>aspectj-maven-plugin</artifactId>
    <version>1.5</version>
    <configuration>
      <source>${maven.compiler.source}</source>
      <target>${maven.compiler.target}</target>
      <complianceLevel>${maven.compiler.target}</complianceLevel>
      <xmlConfigured>myCtAspects.xml</xmlConfigured>
      <aspectLibraries>
        <aspectLibrary>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aspects</artifactId>
        </aspectLibrary>
      </aspectLibraries>
      <showWeaveInfo>true</showWeaveInfo>
      <weaveMainSourceFolder>true</weaveMainSourceFolder>
      <proceedOnError>${maven.aspectj.failOnError}</proceedOnError>
    </configuration>
    <executions>
      <execution>
        <goals>
          <goal>compile</goal>
        </goals>
        <phase>process-resources</phase>
      </execution>
    </executions>
    <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>
  </plugin>

然后在myCtAspects.xml文件中,您只需要明确指定所有需要的方面,包括Spring Aspects。在你的情况下:

<?xml version="1.0"?>
<aspectj>
    <aspects>
        <!-- Spring Aspects -->
        <aspect name="org.springframework.beans.factory.aspectj.AbstractInterfaceDrivenDependencyInjectionAspect"/>
        <aspect name="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect"/>
        <aspect name="org.springframework.transaction.aspectj.AnnotationTransactionAspect"/>        
        <!-- Your Application Aspects -->
    </aspects>
</aspectj>

答案 1 :(得分:0)

请尝试使用aop-autoproxy include属性和一些反转正则表达式(类似^((?! JpaExceptionTranslatorAspect).)*$)。