36

@Autowired List<SomeBeanClass> beans;の Bean があり、ない場合、次のSomeBeanClassようになります。

依存関係 [SomeBeanClass のコレクション] に一致するタイプ [SomeBeanClass] の Bean が見つかりません: この依存関係のオートワイヤー候補として適格な少なくとも 1 つの Bean が必要です。依存関係アノテーション: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

を追加する(required=false)と、 が得nullられbeansます。しかし、null チェックを必要とするエラーが発生しやすいソリューションのように見えます。

Bean が存在しない場合、空のコレクションを自動配線する簡単な方法 (ワンライナー) はありますか?

4

2 に答える 2

44

Spring 4 と Java 8 にはいくつかのオプションがあります。

@Autowired(required=false)
private List<Foo> providers = new ArrayList<>();

java.util.Optionalコンストラクターで使用することもできます。

@Autowired
public MyClass(Optional<List<Foo>> opFoo) {
    this.foo = opFoo.orElseGet(ArrayList::new);
}

で a フィールドを自動配線することもできるはずですがOptional<List<Foo>> opFoo;、まだ使用していません。

于 2015-07-09T20:35:51.147 に答える
23

を追加する(required=false)と、 が得nullられbeansます。

フィールドは明示的に null に設定されますか、それともまったく設定されませんか? 初期化式を追加してみてください

@Autowired(required=false) List<SomeBeanClass> beans = new ArrayList<>();
于 2013-10-10T14:54:23.113 に答える