Spring Bootの構成に問題があります。
https://start.spring.io/ を使用してベースのSpring Bootプロジェクトを作成しました
そして、私は問題があります、構成はサブカタログ内のクラスに対してのみ機能します:
注釈@ ComponentScanを試しましたが、役に立ちませんでした。
私はこれで何ができるのかご存知ですか?
@SpringBootApplication
のスプリングブートドキュメント 状態
多くのSpring Boot開発者は、常に
@Configuration
、@EnableAutoConfiguration
、および@ComponentScan
の注釈が付けられたメインクラスを持っています。これらの注釈は非常に頻繁に一緒に使用されるため(特に上記のベストプラクティスに従う場合)、Spring Bootは便利な@SpringBootApplication
代替手段を提供します。
@SpringBootApplication
注釈は、@Configuration
、@EnableAutoConfiguration
、および@ComponentScan
をデフォルト属性で使用することと同等です :[...]
@ComponentScan
javadocの状態
特定のパッケージが定義されていない場合、この注釈を宣言するクラスのパッケージからスキャンが行われます。
つまり、ReadingListApplication
と同じパッケージに含まれるタイプのみがスキャンされます。
カスタム構成が必要な場合は、必要に応じて、独自の@Configuration
、@EnableAutoConfiguration
、および@ComponentScan
を指定します。
_Spring boot
_プロジェクトを設定するときは、アプリケーションクラス(ベースパッケージに_@SpringBootApplication
_アノテーションを含むクラス)を用意します。
_@SpringBootApplication
_が行うことの1つは、コンポーネントのスキャンです。ただし、sub-packagesでのみスキャンします。つまり、そのクラスをcom.mypackageに配置すると、サブパッケージ、つまりcom.mypackage。*のすべてのクラスがスキャンされます。
このようにしたくない場合は、ルートパッケージを指定するクラスに_@ComponentScan
_を追加することもできます。つまり、@ComponentScan("com.mypackage")
基本パッケージ、つまりcom.mypackageをお勧めします。そして、それらのパッケージ内に、サブパッケージがあります。その基本パッケージに_@SpringBootApplication
_を含むクラスがあります。
Springドキュメントの確認:
@SpringBootApplicationを使用して、コンポーネントスキャンのデフォルト値をオーバーライドできます。パラメータとして含める必要があります:
@SpringBootApplication(scanBasePackages = "entertainment")
または文字列配列:
@SpringBootApplication(scanBasePackages = {"entertainment", "readinglist"})
私は同じ問題を抱えていましたが、それを解決するためにパッケージの名前をこのように変更しました。
「com.project」
そこで、SpringBootAplicationメインクラスを配置し、「com.project」で始まる他のパッケージを作成するだけです。
「com.project.dao」
「com.project.controller」
このサブプロジェクト構造を作成すると、@ SpringBootApplicationアノテーションでscanBasePackagesを使用する必要がなくなります。これを行うと、メインクラスはプロジェクト内のすべてのコンポーネントを見つけることができます。
ScanBasePackagesの使用を選択した場合は、すべてのコンポーネントパッケージを次のように設定する必要があることに注意してください。
@SpringBootApplication(scanBasePackages = {"com.project.dao"、 "com.project.controller"})