簡體   English   中英

找不到類型的 java.util.Date bean

[英]java.util.Date bean of type could not be found

Spring 啟動應用程序在運行時失敗,並出現以下錯誤:

***************************
APPLICATION FAILED TO START
***************************
Description:

Parameter 0 of constructor in com.bla.Application.Domain.SomeJavaClass required a bean of type 'java.util.Date' that could not be found.

Action:

Consider defining a bean of type 'java.util.Date' in your configuration.

我在用:

  1. Spring 啟動 (v1.5.8.RELEASE)
  2. STS4 IDE
  3. Java 8
  4. Linux Ubuntu 18

用戶@主機:~$ java -version
openjdk 版本 "1.8.0_222" OpenJDK 運行時環境 (build 1.8.0_222-8u222-b10-1ubuntu1~18.04.1-b10)
OpenJDK 64 位服務器 VM(內部版本 25.222-b10,混合模式)

我完全重新安裝了Java,錯誤仍然一樣......有問題的Class:

有問題的 Class 位於域 model 中:

package com.vip.SmartScheduler.Domain;

import java.util.Date;
import java.util.List;

import org.springframework.stereotype.Component;

import com.vip.SmartScheduler.Enum.PeriodUnit;

@Component
public class PeriodContainer {

    private Date periodBeginTimestamp;
    private List<UserStats> agentsWithStatistics;
    private PeriodUnit periodUnit;

    public PeriodContainer(Date periodBeginTimestamp, List<UserStats> agents, PeriodUnit periodUnit){
        this.periodBeginTimestamp = periodBeginTimestamp;
        this.agentsWithStatistics = agents;
        this.periodUnit = periodUnit;
    }

    public Date getPeriodBeginTimestamp() {
        return periodBeginTimestamp;
    }

    public void setPeriodBeginTimestamp(Date periodBeginTimestamp) {
        this.periodBeginTimestamp = periodBeginTimestamp;
    }

    public List<UserStats> getAgentsWithStatistics() {
        return agentsWithStatistics;
    }

    public void setAgentsWithStatistics(List<UserStats> agents) {
        this.agentsWithStatistics = agents;
    }

    public PeriodUnit getPeriodUnit() {
        return periodUnit;
    }

    public void setPeriodUnit(PeriodUnit periodUnit) {
        this.periodUnit = periodUnit;
    }

}

問題是您有問題的 class 有其構造函數的參數,但您沒有為參數定義 bean

你可以做幾件事:

定義你的 bean

@Configuration
public class MyBeans {

  @Bean
  public Date periodBeginTimestamp() {
    return new Date();
  }

  @Bean
  public List<UserStats> agents() {
    return new ArrayList<UserStats>();
  }

  @Bean
  public PeriodUnit periodUnit() {
    return new PeriodUnit();
  }

}

這將創建必要的 bean 來注入您的參數,但不確定這是否會給您提供您想要填充值的控件。

零參數構造函數

另一種方法是創建一個零參數構造函數,然后有一個方法來設置你需要的東西:

@Component
public class PeriodContainer {

  private Date periodBeginTimestamp;
  private List<UserStats> agentsWithStatistics;
  private PeriodUnit periodUnit;

  public PeriodContainer(){}

  public void setValues(Date periodBeginTimestamp, List<UserStats> agents, PeriodUnit periodUnit){
    this.periodBeginTimestamp = periodBeginTimestamp;
    this.agentsWithStatistics = agents;
    this.periodUnit = periodUnit;
  }

  ...
}

那么你需要它嗎:

@Service
public class MyClass {
  @Autowire
  private PeriodContainer container;

  @PostConstruct
  private void init() {
    Date periodBeginTimestamp = getTimeStamp();
    List<UserStats> agents = getUserStatsList();
    PeriodUnit periodUnit = getPeriodUnit();
    container.setValues(periodBeginTimestamp, agents, periodUnit); 
  }
}

看起來您可能尚未創建java.Util.date bean。 如果是這樣,請按照此處的步驟正確注入 Date bean 而不會出錯。 如果不是這種情況,請添加您的 bean 配置文件(或 maven pom.xmlm 或等效文件)以幫助理解問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM