SpringBoot应用程序尝试初始化此类时失败:
@Component
public class Weather {
private Map<Integer,Double> maxRainyDays;
private Map<Integer, WeatherDays> totalDays;
public Weather(Map<Integer, WeatherDays> totalDays, Map<Integer,Double> maxRainyDays){
this.setMaxRainyDays(maxRainyDays);
this.setTotalDays(totalDays);
}
错误:
SolarSystem.Models.Weather构造函数的参数0需要一个 类型为“ SolarSystem.Utilities.WeatherDays”的bean,不能为 找到。
提到的bean已经定义(在相同的基本包中):
public enum WeatherDays {
RAINY,
MILD,
DRY,
MAX_RAIN}
解决方法:
当我使用Weather()构造函数时,我解决了这个问题。当然,我必须使用setter来设置对象的属性。
但是我需要了解发生这种情况的原因
答案 0 :(得分:1)
因为您通过构造函数参数注入的集合(在此处映射)未注册为Spring Bean。这就是为什么要用@service
,@repository
等注释类,然后将它们自动连接到其他类的原因。要解决此问题,您可以设置类似以下的配置类:
@Configuration
public class BeanConfig {
@Bean
public Map<Integer, WeatherDays> totalDays() {
Map<Integer, WeatherDays> map = new HashMap<>();
map.put(1, WeatherDays.DRY);
return map;
}
@Bean
public Map<Integer, Double> maxRainyDays() {
Map<Integer, Double> map = new HashMap<>();
map.put(1, 0.2);
return map;
}
}