@Requiredアノテーションは、コンテナが依存関係注入のためのBeanを見つけられない場合、この例外をスローします:
org.springframework.beans.factory.BeanInitializationException
@Autowiredの例外は次のとおりです。 org.springframework.beans.factory.BeanCreationException
これらのシナリオを考えてみましょう。 私は存在しない別のBean Bを注入するためにBean Aで@Requiredを使用し、次にアプリケーションを起動します。 @AutowiredをBean Aで使用して、存在しない別のBean Bを注入してから、アプリケーションを起動します。
@Requiredと@Autowiredの例外がスローされたときを知りたいですか?それは同じ時ですか? Springアプリケーションのコンテキストがロードされたら?
回答:
回答№1は2@Required
アノテーションは、Springによって処理されています。 RequiredAnnotationBeanPostProcessor
そして @Autowired
〜によって AutowiredAnnotationBeanPostProcessor
。ソースコードによると ここに そして ここにこれらの2つのポストプロセッサは、それぞれ注文されます。のためのもの @Autowired
〜の順序 Integer.MAX_VALUE - 2
の @Required
は Integer.MAX_VALUE - 1
。による 春の Ordered
インタフェース値が低いほど優先度が高くなります。
それに基づいて、私は信じています @Autowired
Beanポストプロセッサは、その前に実行されます @Required
。あなたの質問に答えるためには、 @Autowired
その前に投げられる @Required
Springアプリケーションコンテキストが作成されたとき。