如何解决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 举报,一经查实,本站将立刻删除。