SpringJavaConfigで使用しているもの@Autowired
が機能しない理由を理解するのに苦労しています。
まず、@Autowired
JavaConfigクラスのすべてのアノテーションを移動しようとしています。これは、私の「POJO」を実際のPOJOに戻す効果があります。そうすれば、Springコンテキストの外でそれらを簡単にテストできるだけでなく、モックオブジェクトを簡単かつ簡単に使用することもできます。
だから私は最初にこれを試しました:
@Configuration
public class Module3ConfigClass {
@Autowired
private Module1Bean1 module1Bean1;
@Autowired
private Module2Bean1 module2Bean1;
@Bean
public Module3Bean1 module3Bean1() {
return new Module3Bean1(module1Bean1, module2Bean1);
}
}
ただし、Module3Bean1
コンストラクターが呼び出されると、Beanに渡される両方がnullになります。上記の私の作成した命名規則に従わなかった場合、これらのBeanは両方とも別個のJavaConfig構成ファイルによって作成されます。また、すべてが正しく配線されていることにも注意してください。@Autowired
タグが内の対応するプライベートメンバーフィールドにある場合、すべてが完全に機能するため、これはわかっていますModule3Bean1
。
@DependsOn
FWIW、メソッドにアノテーションを追加しようとしましmodule3Bean1()
たが、同じ結果になりました。私はこの振る舞いを本当に理解したいと思います、それは正しいですか(私はそれが正しいと思いますが、なぜですか)?
最後に、ここに示す許容可能な回避策を見つけました。
@Configuration
public class Module3ConfigClass {
@Bean
@Autowired
public Module3Bean1 module3Bean1(Module1Bean1 module1Bean1, Module2Bean1 module2Bean1) {
return new Module3Bean1(module1Bean1, module2Bean1);
}
}
これは私には問題ないように思えますが、誰かがそれについてコメントしたいのであれば、それも歓迎されます。