私はSpringBoot MVCアプリケーションを使用します。 私は@Configuration
クラスを持っていて、ApplicationContext
にbeanを初期化するクラスは@Bean
です。 @Autowired
注釈を使用してBeanをオートワイヤリングしようとしている@Controller
クラスがあります。@Autowiredの後にSpring @Beanメソッドを実行する
結果:@Autowired
フィールドはnull
です。
DEBUG:実行順序を確認するためにデバッグしようとしました。私は、@Configuration
で注釈を付けられたクラスがBeanをアプリケーションコンテキストに初期化するために最初に実行されることを期待していました。しかし、コントローラクラスが最初にインスタンス化されました。その後、@Bean
メソッドのクラスが次に呼び出されました。このBeanはコントローラの後にインスタンス化されているため、コントローラがBeanを自動取得しないのはこのためです。
質問:コントローラクラスのインスタンス化の前に@Configuration
@Bean
メソッドを実行する方法はありますか?
設定クラスのコード:
@Configuration
public class RootConfiguration2 {
@Autowired
private IService<ActBinding> bindingService;
@Bean
public Map<String, String> getBingindNameToRoutingKeyMap() throws Exception {
ListOperation<ActBinding> operation = ListOperation.from("key", "name", "exchangeId");
operation.sort("key", SortOrder.Ascending);
Iterable<ActBinding> result = bindingService.list(operation).getResult();
Map<String, String> bindingNameToRoutingKey = new HashMap<>();
result.forEach(x -> bindingNameToRoutingKey.put(x.getName(), x.getKey()));
return Collections.unmodifiableMap(bindingNameToRoutingKey);
}
}
あなたは構成クラスコードを共有できますか? –
ロギングをオンにして、警告メッセージを確認します。 – OrangeDog
IServiceのコードを表示し、getBingindNameToRoutingKeyMapを挿入する場所を指定する必要があります。このようなエラーについては言及していませんが、循環依存である可能性があります。インジェクションgetBingindNameToRoutingKeyMapと@Autowring(required = false)が組合わされていると、タイプミスが発生する可能性があります。 –
alexbt