web-dev-qa-db-ja.com

アノテーション@SpringBootApplicationを使用した設定

Spring Bootの構成に問題があります。

https://start.spring.io/ を使用してベースのSpring Bootプロジェクトを作成しました

そして、私は問題があります、構成はサブカタログ内のクラスに対してのみ機能します:

enter image description here

注釈@ ComponentScanを試しましたが、役に立ちませんでした。

私はこれで何ができるのかご存知ですか?

22
zaqpiotr

@SpringBootApplicationのスプリングブートドキュメント 状態

多くのSpring Boot開発者は、常に@Configuration@EnableAutoConfiguration、および@ComponentScanの注釈が付けられたメインクラスを持っています。これらの注釈は非常に頻繁に一緒に使用されるため(特に上記のベストプラクティスに従う場合)、Spring Bootは便利な@SpringBootApplication代替手段を提供します。

@SpringBootApplication注釈は、@Configuration@EnableAutoConfiguration、および@ComponentScanをデフォルト属性で使用することと同等です :[...]

@ComponentScan javadocの状態

特定のパッケージが定義されていない場合、この注釈を宣言するクラスのパッケージからスキャンが行われます。

つまり、ReadingListApplicationと同じパッケージに含まれるタイプのみがスキャンされます。

カスタム構成が必要な場合は、必要に応じて、独自の@Configuration@EnableAutoConfiguration、および@ComponentScanを指定します。

52

_Spring boot_プロジェクトを設定するときは、アプリケーションクラス(ベースパッケージに_@SpringBootApplication_アノテーションを含むクラス)を用意します。

_@SpringBootApplication_が行うことの1つは、コンポーネントのスキャンです。ただし、sub-packagesでのみスキャンします。つまり、そのクラスをcom.mypackageに配置すると、サブパッケージ、つまりcom.mypackage。*のすべてのクラスがスキャンされます。

このようにしたくない場合は、ルートパッケージを指定するクラスに_@ComponentScan_を追加することもできます。つまり、@ComponentScan("com.mypackage")

基本パッケージ、つまりcom.mypackageをお勧めします。そして、それらのパッケージ内に、サブパッケージがあります。その基本パッケージに_@SpringBootApplication_を含むクラスがあります。

14
Kabir

Springドキュメントの確認:

http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/SpringBootApplication.html

@SpringBootApplicationを使用して、コンポーネントスキャンのデフォルト値をオーバーライドできます。パラメータとして含める必要があります:

@SpringBootApplication(scanBasePackages = "entertainment")

または文字列配列:

@SpringBootApplication(scanBasePackages = {"entertainment", "readinglist"})

10
alvgarvilla

私は同じ問題を抱えていましたが、それを解決するためにパッケージの名前をこのように変更しました。

「com.project」

そこで、SpringBootAplicationメインクラスを配置し、「com.project」で始まる他のパッケージを作成するだけです。

「com.project.dao」

「com.project.controller」

このサブプロジェクト構造を作成すると、@ SpringBootApplicationアノテーションでscanBasePackagesを使用する必要がなくなります。これを行うと、メインクラスはプロジェクト内のすべてのコンポーネントを見つけることができます。

ScanBasePackagesの使用を選択した場合は、すべてのコンポーネントパッケージを次のように設定する必要があることに注意してください。

@SpringBootApplication(scanBasePackages = {"com.project.dao"、 "com.project.controller"})

1
Wesley Silva