如何禁用Spring的JpaExceptionTranslatorAspect

 mobiledu2502900505 发布于 2023-02-09 18:46

我正在从Spring 2.5.6迁移到3.2.5.jar spring-aspects-3.2.5包含新方面JpaExceptionTranslatorAspect,它将标准JPA异常转换为Spring异常.它似乎是一个特定于Roo的方面.这个方面会自动编织到存储库中(使用@Repository注释).因此,标准JPA异常不再被捕获并且应用程序被破坏.

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

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

我已经收集了什么:

Spring拒绝了这个问题,因为它是一个构建问题

AspectJ Maven Plugin拒绝了该问题,因为AspectJ编译器不支持从库中排除特定方面

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

1 个回答
  • 首先,将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>
    

    2023-02-09 18:50 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有