java - 没有可用的“org.springframework.data.rest.core.util.Java8PluginRegistry”类型的合格bean
问题描述
作为将 spring 应用程序迁移到 springboot (2.1.7) 的一部分,我遇到了自定义RepositoryEntityLinks类的问题。下面的类给出了构造函数参数PluginRegistry的编译问题,因此我将其更改为Java8PluginRegistry:
前 :
public class CustomRepositoryEntityLinks extends RepositoryEntityLinks {
private final ResourceMappings mappings;
private final RepositoryRestConfiguration config;
public CustomRepositoryEntityLinks(
Repositories repositories,
ResourceMappings mappings,
RepositoryRestConfiguration config,
PagingAndSortingTemplateVariables templateVariables,
PluginRegistry<BackendIdConverter, Class<?>> idConverters) {
super(repositories, mappings, config, templateVariables, idConverters);
this.mappings = mappings;
this.config = config;
}
@Override
public LinkBuilder linkFor(Class<?> type) {
ResourceMetadata metadata = mappings.getMetadataFor(type);
return new CustomRepositoryLinkBuilder(metadata, config.getBaseUri());
}
}
后 :
public class CustomRepositoryEntityLinks extends RepositoryEntityLinks {
private final ResourceMappings mappings;
private final RepositoryRestConfiguration config;
public CustomRepositoryEntityLinks(
Repositories repositories,
ResourceMappings mappings,
RepositoryRestConfiguration config,
PagingAndSortingTemplateVariables templateVariables,
Java8PluginRegistry<BackendIdConverter, Class<?>> idConverters) {
super(repositories, mappings, config, templateVariables, idConverters);
this.mappings = mappings;
this.config = config;
}
@Override
public LinkBuilder linkFor(Class<?> type) {
ResourceMetadata metadata = mappings.getMetadataFor(type);
return new CustomRepositoryLinkBuilder(metadata, config.getBaseUri());
}
}
我唯一改变的是构造函数参数,从 PluginRegistry 到 Java8PluginRegistry。
当我向此类添加 @Component 注释时,应用程序无法启动此问题:
2019-12-20 18:16:33,491|11782|main|WARN|org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext|Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'customRepositoryEntityLinks' defined in file [C:\com\custom\web\common\CustomRepositoryEntityLinks.class]: Unsatisfied dependency expressed through constructor parameter 4; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.data.rest.core.util.Java8PluginRegistry<org.springframework.data.rest.webmvc.spi.BackendIdConverter, java.lang.Class<?>>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 4 of constructor in com.web.common.CustomRepositoryEntityLinks required a bean of type 'org.springframework.data.rest.core.util.Java8PluginRegistry' that could not be found.
Action:
Consider defining a bean of type 'org.springframework.data.rest.core.util.Java8PluginRegistry' in your configuration.
有人可以帮忙吗?提前致谢 :)
解决方案
RepositoryRestMvcConfiguration
不公开 beanJava8PluginRegistry
类型。这种行为可能会随着最近的更新而改变。如果您遵循如何在类中创建常规RepositoryEntityLinks
bean的约定,则RepositoryRestMvcConfiguration
可以创建自定义CustomRepositoryEntityLinks
类的 bean,如以下代码片段所示(省略创建 CustomRepositoryEntityLinks 实例的其他参数)。
@Bean
public CustomRepositoryEntityLinks entityLinks(PluginRegistry<BackendIdConverter, Class<?>> backendIdConverterRegistry, ...) {
return new CustomRepositoryEntityLinks(..., ..., ..., ..., Java8PluginRegistry.of(backendIdConverterRegistry));
}
推荐阅读
- css - Tinymce Angular7:不通过 content_css 属性加载自定义 css 文件
- python - AttributeError:“StreamingPullFuture”对象没有“打开”属性
- android - Cordova build android 错误:在 vs 2017 azure devops 代理上无法解析 com.github.scottyab:rootbeer:0.0.7
- mqtt - 为什么 HAProxy 在 TLS 握手结束时会关闭与 HiveMQ MQTT 客户端的连接?
- node.js - 如何使用 sinon 存根 Winston 记录器
- go - 使用动态结构创建切片
- oracle12c - 交换和拆分分区有问题
- c# - 在 Main 中执行 DateTime 方法
- javascript - 如何获取 MQTT 中的所有主题?
- amazon-web-services - 限制对账户中 AWS 存储桶的访问,同时仍允许访问其他账户中的公共存储桶