当前位置: 首页 > 知识库问答 >
问题:

启用SpringAOP后,Spring数据存储库不工作[Java11]

相洛华
2023-03-14

嗨,我有一个使用Spring 5、Spring Data、Spring AOP和Java 11的应用程序(我也在使用JAVA 9模块系统)。我的spring-context/spring-aspects版本是5.1.2.RELEASE Spring数据版本是2.1.2.RELEASE这两个版本都是最新的。我以下列方式创建了存储库:

@Repository
public interface AirportRepository extends JpaRepository<Airport, Long> {
}

我已启用Spring Data Repositories使用

@Configuration
@EnableTransactionManagement
@PropertySource("classpath:persistence-jndi.properties")
@PropertySource("classpath:hibernate.properties")
@EnableJpaRepositories(basePackages = "com.xx.yy.persistence")
public class PersistenceJNDIConfig {
  //Datasource configs
}

在我使用下面的配置引入Spring AOP之前,它一直工作得很好。

@ComponentScan(basePackages = "com.xx.yy")
@EnableAspectJAutoProxy(exposeProxy = true)
public class AdminServicesConfiguration {
}

@Aspect
@Component
public class DasErrorHandler {

    @Around("@target(com.xx.yy.commons.aop.ErrorManagedDAS)")
    public Object handle(ProceedingJoinPoint proceedingJoinPoint){
        //Some code
    }
}

但现在在服务器启动时,我收到以下错误:

Caused by: java.lang.IllegalStateException: Cannot convert value of type 'com.sun.proxy.$Proxy82 implementing org.springframework.data.util.Streamable,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised,org.springframework.core.DecoratingProxy' to required type 'org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments' for property 'repositoryFragments': no matching editors or conversion strategy found
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:299)
    at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:585)
    ... 103 more

似乎Spring生成的代理类型不匹配,这导致了上述错误,我试图通过使:

@EnableAspectJAutoProxy(exposeProxy = true, proxyTargetClass = true )

然后错误更改为跟随,即使我的类路径上有SpringProxy类。请帮助:

Caused by: org.springframework.aop.framework.AopConfigException: Could not generate CGLIB subclass of class org.apache.tomcat.dbcp.dbcp2.BasicDataSource: Common causes of this problem include using a final class or a non-visible class; nested exception is org.springframework.cglib.core.CodeGenerationException: java.lang.NoClassDefFoundError-->org/springframework/aop/SpringProxy
    at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:208)
    at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:110)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.createProxy(AbstractAutoProxyCreator.java:473)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.wrapIfNecessary(AbstractAutoProxyCreator.java:352)
    at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessAfterInitialization(AbstractAutoProxyCreator.java:301)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:434)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1749)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
    ... 88 more
Caused by: org.springframework.cglib.core.CodeGenerationException: java.lang.NoClassDefFoundError-->org/springframework/aop/SpringProxy
    at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:503)
    at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:359)
    at org.springframework.cglib.proxy.Enhancer.generate(Enhancer.java:582)
    at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:106)
    at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:104)
    at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54)
    at java.base/java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:264)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java)
    at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61)
    at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34)
    at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:130)
    at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:315)
    at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:569)
    at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:416)
    at org.springframework.aop.framework.ObjenesisCglibAopProxy.createProxyClassAndInstance(ObjenesisCglibAopProxy.java:58)
    at org.springframework.aop.framework.CglibAopProxy.getProxy(CglibAopProxy.java:205)
    ... 95 more
Caused by: java.lang.NoClassDefFoundError: org/springframework/aop/SpringProxy
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.System$2.defineClass(System.java:2123)
    at java.base/java.lang.invoke.MethodHandles$Lookup.defineClass(MethodHandles.java:962)
    at java.base/jdk.internal.reflect.GeneratedMethodAccessor42.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:498)
    ... 110 more
Caused by: java.lang.ClassNotFoundException: org.springframework.aop.SpringProxy
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 117 more

编辑:module-info.java为模块如下

module com.xx.yy.admin.services {
    //External
    requires spring.webmvc;
    requires spring.web;
    requires spring.context;
    requires javax.servlet.api;
    requires org.apache.commons.collections4;
    requires org.apache.logging.log4j;
    requires org.apache.logging.log4j.core;
    requires spring.aop;
    requires org.aspectj.weaver;
    requires spring.aspects;

    //Internal
    requires com.xx.yy.utils;
    requires com.xx.yy.persistence;
}

module com.xx.yy.persistence {
    requires spring.context;
    requires spring.beans;
    requires spring.core;
    requires spring.data.commons;
    requires spring.data.jpa;
    requires spring.tx;
    requires spring.jdbc;
    requires spring.orm;
    requires spring.aop;
    requires java.sql;
    requires java.persistence;
    requires java.naming;
    requires java.xml;
}

module com.xx.yy.utils {
    requires com.fasterxml.jackson.core;
    requires com.fasterxml.jackson.databind;
    requires com.fasterxml.jackson.datatype.jsr310;
    requires orika.core;
    requires spring.context;
    requires org.aspectj.weaver;
    requires spring.aspects;
}

共有1个答案

闾丘选
2023-03-14

尝试将 AOP 库添加到依赖项

<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>5.1.2.RELEASE</version>
</dependency>
 类似资料:
  • 我是Spring data neo4j的新手,我对GraphRepository有一些错误/问题。 我第一次有了这个: 但是阅读一些文档,存储库已经提供了这样的方法。我不需要写它们。 这是我的产品域名。 这是我的实验班 未检测到查找字节 Id 这正常吗? 这是我的pom.xml

  • 正在执行查询,但未得到任何结果。 路由器:-api/v1/service/appt/usr/{usr_id} 存储库代码, 从日志中查询, 项目表中的数据, 邮递员请求, 不确定这有什么问题。它不会返回记录。

  • 这根本不是关于Spring靴的。 我的英语可以更好。 使用下面的Spring Data配置,我正在尝试执行DML请求。 恰好是< code>CrudRepository#save方法。 然而,执行Spring的CrudRepository#保存方法,我接下来要做的是: 只有选择由功能记录。 没有执行任何“插入”或“更新”语句来hibernate.show_sql日志记录。 数据库根本没有变化。 =

  • 我想使用SpringBoot和SpringDataMongoDB开发一个小测试应用程序。因此,在本例中,我使用默认配置(如localhost:27017/test-database),并尝试遵循spring指南(https://spring.io/guides/gs/accessing-data-mongodb/). 我按如下方式启动我的应用程序: DummyClass如下所示: 当project

  • 我试图创建一些切入点和之前的建议为存储库,以便能够在Spring启动的Spring数据中过滤一些存储库的实体管理器。我在项目中也有Web和服务层,AounLogging适用于两者。但是我不能为存储库做同样的事情。我已经挣扎了2天,我尝试了很多东西来修复它。我几乎阅读了关于此的每个文档、问题和线程(代理问题CGlib和JDK代理等)。我使用jhipster创建项目。 除了@Pointcut和Crud

  • 我有这样的配置 在包中,有一个组件需要中的存储库。 这适用于spring数据MongoDB 1.5.2版 如果我升级到任何高于1.6.0.release的版本(我尝试过1.6.2和1.7.0),这将不再有效。这就好像mongo存储库扫描不工作,我得到了错误: 有什么想法吗? 更新:如果我使用MongoRepository而不是PagingAndSortingRepository,它可以工作: 这不