java - Spring无法在配置中创建定义抽象类的bean
问题描述
public abstract class AbstractMapper<T> implements Function<SomeProducts, T> {
private final ABC abc;
private final XYZ xyz;
constructor()
some abstract methods
我有这个抽象类的两个实现
@Component
public class ProductDTOMapper extends AbstractMapper<Product> {
constructor()
@Override
public Product apply(final SomeProducts products) {
return Product.builder()
.id()
.build();
}
抽象类的第二种实现
@Component
public class CustomerDTOMapper extends AbstractMapper<CustomerDocument> {
constructor()
@Override
public CustomerDocument apply(final SomeProducts products) {
return CustomerDocument.builder()
.id()
.build();
}
我用 lombok 构建 CustomerDocument 和 Product:
@Data
@Builder
@Type("typeA")
public class CustomerDocument {
some attributes
}
第二个建造者等级:
@Data
@Builder
@Type("typeB")
public class Product {
some attributes
}
在我的控制器中,我有两个映射器的实例:
@AllArgsConstructor
@RestController
@RequestMapping
public class ZController {
private final AbstractMapper<Product> productDTOMapper;
private final AbstractMapper<CustomerDocument> customerDTOMapper;
当我启动应用程序时,我收到此错误:
Parameter 1 of constructor in ZController required a bean of type 'x.y.z.rest.mapper.AbstractMapper' that could not be found.
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'zController' defined in file [/path/to/controller/rest/controller/ZController.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'x.y.z.rest.mapper.AbstractMapper<rest.dto.product.CustomerDocument>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354)
解决方案
看看这个:
@AllArgsConstructor
@RestController
@RequestMapping
public class ZController {
private final ProductDTOMapper productDTOMapper;
private final CustomerDTOMapper customerDTOMapper;
如果您想使用超类进行输入,请尝试使用字段依赖注入而不是构造函数 DI,并使用混合@Qualifier
和@Autowired
注释。
问候,
推荐阅读
- java - 如何将android imageview坐标转换为PDFView坐标以在PDF框库中添加电子签名?
- wordpress - /wp-admin 返回“抱歉,您无权访问此页面。” 在为 SSL 终止添加 CDN 之后?
- javascript - 在 firebase firestore 的集合中搜索字段
- json - Chrome 扩展错误:不允许使用尾随逗号,必须引用字典键
- laravel - Laravel 7如何安装语言
- python - max函数的时间复杂度
- c++ - 需要有关 gtkmm 中的多线程的帮助
- android - 为 RecyclerView 中一定数量的可见项目调用 OnScrollListener
- javascript - 是否可以在 react-native 中实现 HandlebarJS?
- database - 从 Spring Boot 应用程序以编程方式创建数据库