私のアプリケーションには、とりわけ以下のクラスが含まれていますフィールド用の前記インターフェースを使用する。春ComponentScanパッケージ構造
@Component
class com.foo.appl.pack.ImplementationClass {
@Autowired
ClassToAutowire autoClass;
@Scheduled(fixedRate = 60000)
public void startStuff() {
// do something...
}
}
しかし、フィールドがautowireません。
フィールドAUTOCLASSをcom.foo.appl.pack.ImplementationClassでは見つかりませんでした型「com.foo.bar.ClassToAutowire」の Beanを要求しました。
処置:
は、あなたの 構成のタイプ 'com.foo.bar.ClassToAutowire' のBeanを定義することを検討してください。
私の春は私のパッケージ構造が嫌いでしょうか?
com.foo.bar.ClassToAutowire
com.foo.appl.SpringMainApplication
com.foo.appl.pack.ImplementationClass
@SpringBootApplication
は、ルートパッケージにする必要もありませんし、すべてのコンポーネントがサブパッケージでなければなりませんか?その場合、ClassToAutowire
はインポートされたJARに由来しているので、どのようにして私の "問題"を解決しますか?
basePackge
をcom.foo.bar
に変更すると、アプリケーションが起動しますが、スケジュールされた方法は実行されません。
おかげ
'SpringMainApplication'を' com.foo'に入れるか、 '@ComponentScan(" com.foo ")'をあなたの 'SpringMainApplication'に追加してください。 –
'com.foo'に' SpringMainApplication'を置くと私の問題は解決しますが、私は自分のパッケージ構造をそのままにしておきたいと思います... '@ComponentScan(" com.foo ")'は既にSpringMainApplicationに追加されています。 – eiz
トップレベルパッケージの出発点としては、ベストプラクティスです。あなたが本当にそれを望まないのであれば(特にもっと多くのフレームワークを使い始めるときにはいくつかの欠点があります)、@ComponentScan( "com.foo")を追加してください。しかし、これはSpring Dataリポジトリの自動検出ではなく、 JPAエンティティなどの場合、他にも無料で入手できるたくさんの追加設定が必要になります。 –