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

Spring不能在配置中创建定义抽象类的bean

谷博艺
2023-03-14
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();
        }
@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)

共有1个答案

潘国源
2023-03-14

看看这个:

@AllArgsConstructor
@RestController
@RequestMapping
public class ZController {

    private final ProductDTOMapper productDTOMapper;
    private final CustomerDTOMapper customerDTOMapper;

如果您想用super class键入,请尝试使用字段依赖项注入而不是构造函数DI,并混合使用@qualifier@autowired注释。

问候,

 类似资料:
  • 我的Spring Batch配置有5个步骤,除了阅读器之外,所有步骤都是相同的。有没有一种方法可以把步骤的所有其他部分抽象成“父”步骤,这样我就不需要重复所有的事情?我知道这可以用XML完成,但是我不知道java的等价物。 以下是其中一个步骤: 以下是其中一位读者的定义:

  • 我通过学校为一项任务提供的简报创建了一个飞机座位预订系统。我遇到了一个我无法解决的主要问题。 摘要说明抽象类必须有一个抽象方法和大约4个公共方法。在抽象类的两个子类中,我们都必须初始化对象数组(所有普通的座位)。然而,一旦它们被初始化,我不知道如何将它们发送回抽象类(该类有一个检查未预订的飞机座位的方法,这就是我需要初始化的座位对象的地方) ArrayIndexOutOfBounds在一个应该在边

  • 问题内容: 在以下代码中,我创建了一个基本抽象类。我希望所有继承自其的类都提供该属性,因此我将该属性设置为。 然后,我创建了一个名为的子类,该子类旨在提供一些功能,但仍保持抽象。中没有属性,但是python实例化了该类的对象而没有错误。一个人如何创建抽象属性? 问题答案: 从Python 3.3 开始,修复了一个错误,这意味着装饰器现在应用于抽象方法时,可以正确地标识为抽象。 注:订单的问题,你必

  • 我有一个子类,它声明了我的抽象超类中的所有方法,但它仍然给我一个错误,说明我的类不是抽象的。我不知道为什么会抛出这个错误。 我得到的具体错误是 PhoneBookEntry.java: 1:错误:PhoneBookEntry不是抽象的,并且不会覆盖可比中的抽象方法compareTo(Object) 我的问题代码: 还有我的子类:

  • 我需要将旧式spring项目迁移到springboot。假设下面的代码片段我必须迁移到Spring Boot风格。 在这里我的问题,如何将下面的抽象bean转换为@Bean?