2017-02-20 10 views
2

Springによって作成されたゲームルームのリストがあります。各客室には(列挙型である)いくつかのルールが対応し、コードは次のとおりです。Spring java config - 実行時に作成されたbeanのリストを作成する

@Bean 
List<Room> rooms() { 
    return Arrays.stream(Rules.values()) 
     .map(rule -> new Room(rule)) 
     .collect(Collectors.toList()); 
} 

しかし、今、私はあまりにも@Beansする部屋を必要とする:私は春が彼らに@EventListener注釈を処理したいです。しかし、私は将来的にRules列挙型を更新することができるので、手動で設定する必要はありません。どうすればこの問題を解決できますか?ありがとう。

答えて

1

@EventListenerを必要とせずに十分である

@Bean 
List<Room> rooms() { 
    return Arrays.stream(Rules.values()) 
     .map(rule -> room(rule)) 
     .collect(Collectors.toList()); 
} 

@Bean 
Room room(Rule rule) { 
    return new Room(rule); 
} 

以下のように、すなわちRoom Beanを作成@Beanでマークされている別のメソッドを呼び出すことによって達成することができます。

これ以上の情報が必要な場合は、コメントにご記入ください。

+0

'room()' Beanのスコープが指定されていない場合、listのすべての部屋は同じルールを持っています: 'Rules.values()[0]'。だから私は 'room()' beanを '@Scope(" prototype ")'とマークする必要があります。 しかし、イベントを送信した後、例外が発生します。「ApplicationConfigで定義された名前 'room'を持つBeanを作成中にエラーが発生しました。メソッド 'room'パラメータ0で表されている満足度の低い依存関係。ネストされた例外はNoSuchBeanDefinitionExceptionです:タイプ 'Rules'の適格なBeanはありません。また、私のIDEは、 'room()' beanの場合、パラメータとして候補がないと主張しています。 – awfun

+0

はい、beanスコープは 'prototype'でなければなりません。また、エラーには 'public'メソッドがありますか? (*これについては確かではありません*) –

+0

メソッドはパッケージプライベートですが、それは問題ではありません - もしそうなら、私は起動時に例外を受け取ります – awfun

関連する問題