fete.bird.repository.GenericRepository位于加载程序“ app”的未命名模块中

问题描述

接口

package fete.bird.repository;

import com.mongodb.reactivestreams.client.MongoCollection;

public interface IGenericRepository<T> {
    MongoCollection<T> getCollection(String collectionName,Class<T> typeParameterClass);
}

实施

package fete.bird.repository;

import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoCollection;


import javax.inject.Singleton;

@Singleton
public class GenericRepository<T> implements IGenericRepository<T>{
    private final MongoClient mongoClient;

    public GenericRepository(MongoClient mongoClient) {
        this.mongoClient = mongoClient;
    }

    @Override
    public MongoCollection<T> getCollection(String collectionName,Class<T> typeParameterClass) {
        return mongoClient
                .getDatabase("FeteBird-Product")
                .getCollection(collectionName,typeParameterClass);
    }
}

例外

io.micronaut.context.exceptions.BeanContextException: Unexpected error loading bean definition [fete.bird.repository.$GenericRepository$InterceptedDefinition]: class fete.bird.repository.GenericRepository$Intercepted can not implement fete.bird.repository.GenericRepository,because it is not an interface (fete.bird.repository.GenericRepository is in unnamed module of loader 'app')
    at io.micronaut.context.AbstractBeanDefinitionReference.isPresent(AbstractBeanDefinitionReference.java:92)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:176)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:952)
    at java.base/java.util.stream.ReduceOps$ReduceTask.doLeaf(ReduceOps.java:926)
    at java.base/java.util.stream.AbstractTask.compute(AbstractTask.java:327)
    at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1016)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1665)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1598)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
Caused by: java.lang.IncompatibleClassChangeError: class fete.bird.repository.GenericRepository$Intercepted can not implement fete.bird.repository.GenericRepository,because it is not an interface (fete.bird.repository.GenericRepository is in unnamed module of loader 'app')
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:825)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:723)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:646)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:604)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    at fete.bird.repository.$GenericRepository$InterceptedDefinitionClass.getBeanType(Unknown Source)
    at io.micronaut.context.AbstractBeanDefinitionReference.isPresent(AbstractBeanDefinitionReference.java:84)
    ... 15 common frames omitted

使用界面

@KafkaListener(offsetReset = OffsetReset.EARLIEST)
public class ProductListener {
    private static final Logger LOG = LoggerFactory.getLogger(ProductListener.class);
    private final IGenericRepository<Product> repository;

    public ProductListener(IGenericRepository<Product> repository) {
        this.repository = repository;
    }

    @Topic(ProductTopicConstants.GET_FREE_TEXT_SEARCH)
    public Flowable<List<Product>> findByFreeText(String text) {
            var item = this.repository.getCollection("product",Product.class);
        return Flowable.just(List.of(new Product()));
    }
}

根据语句Caused by: java.lang.IncompatibleClassChangeError: class fete.bird.repository.GenericRepository$Intercepted can not implement fete.bird.repository.GenericRepository,because it is not an interface (fete.bird.repository.GenericRepository is in unnamed module of loader 'app')

,我不知道是什么原因造成的

但是我还没有实现GenericRepository,我已经实现了代码中的IGenericRepository

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...