2017-12-19 4 views
0

Webリクエストから呼び出される@Serviceクラスがあります。コンストラクタを持つリストの中の@Autowiredオブジェクトを初期化する方法

これは実装タイプ

private List<Interface> interfaceServices; 

@Autowired 
public ValidateInterfaceService(List<Interface> interfaceServices) { 
    this.interfaceServices = interfaceServices; 
} 

リスト内の項目の一つがコンストラクタを持っている場合を除き、意図したとおり、この作品のオブジェクトのリストを初期化するコンストラクタを有します。

@Service 
@Order(3) 
public class EvaluateExampleWithConstructor implements Interface { 

private LocalDate busDate; 

@Autowired 
public EvaluateExampleWithConstructor(LocalDate busDate) { 
    this.busDate = busDate; 
} 

私がしようとすると、コンストラクタに渡された値が、私はこれを初期化しない方法方法のために必要とされている場合

「デフォルトコンストラクタが見つからない」として、コードが実行することはできませんリストにこのクラスを持っている場合正しくリストされますか?

+3

これは問題ではありません。主な問題は、あなたが実際にBeanを構築できるようにするLocalDate型のBeanを持たないということです。 –

+0

Beanは、ValidateInterfaceServiceクラス内ではどこですか? @Autowired LocalDate busdate; ? –

+0

アプリケーションのコンテキストではありません。あなたはコンストラクタで '@ Autowired'を持っていますので、' LocalDate'型のBeanを有効なBeanとして構築する必要があります。 –

答えて

0

問題はprivate LocalDate busDateがコンテキスト内のBeanではないために発生します。あなたはこのように、注射用LOCALDATEを作成することができます。

@Configuration 
public class FooConfiguration { 

    @Bean 
    public LocalDate busDate() { 
     return ... 
    } 

} 

注このかなり奇妙に見える、とあなたはあなたのユースケースに応じて、異なる方法でこの日付を初期化したほうが良いかもしれません、e.q. @Valueを使用してください。

関連する問題