为什么 Spring 就在那里时找不到默认构造函数?

问题描述

我不断收到错误消息:

Error creating bean with name 'category' defined in file [/home/dazikiri_anikar/IdeaProjects/shop/target/classes/pl/shop/models/Category.class]: Instantiation of bean Failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [pl.shop.models.Category]: No default constructor found; nested exception is java.lang.NoSuchMethodException: pl.shop.models.Category.<init>()

这是 Spring 有问题的类:

package pl.shop.models;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Component
public enum Category {

    HEALTHY_FOOD,JUNK_FOOD,TEAS_AND_COFFEES,SPICES,GRAINS_AND_LENTILS,NUTS_AND_SEEDS,DRIED_FRUITS,SNACKS,DRINKS;

    private String categoryName;
    List<Product> productList = new ArrayList<>();
}

我找到的所有答案都是...定义认构造函数。哪个……就在那里, 来自 Lombok 的 @NoArgsConstructor,对吗? 即使我删除它并自己定义它,它也不会改变任何事情。

我尝试自己定义两个构造函数(无参数和所有参数)但无济于事,然后添加 @Autowired 导致错误,即没有“字符串”bean,这让我在这个阶段完全无能为力。

请帮忙。

解决方法

在 Java 中,Enum 只有私有构造函数。因此不能被 Spring 实例化