春の@EntityScan対。@ComponentScan
1. 序章
Springアプリケーションを作成するときに、エンティティクラスを含むパッケージの特定のリストを指定する必要がある場合があります。 同様に、ある時点で、初期化する必要があるのはSpringBeanの特定のリストだけです。 ここで、@EntityScanまたは@ComponentScanアノテーションを利用できます。
ここで使用する用語を明確にするために、コンポーネントは次のクラスです。 @コントローラ 、 @ Service、@ Repository、@ Component 、
この短いチュートリアルでは、Springでの@EntityScanと@ComponentScanの使用法について説明し、それらが何に使用されるかを説明してから、それらの違いを指摘します。
2. @EntityScanアノテーション
Springアプリケーションを作成するときは、通常、エンティティクラス( @Entity アノテーションが付けられたクラス)があります。 エンティティクラスを配置するための2つのアプローチを検討できます。
- アプリケーションのメインパッケージまたはそのサブパッケージの下
- 完全に異なるルートパッケージを使用する
最初のシナリオでは、 @EnableAutoConfiguration を使用して、Springがアプリケーションコンテキストを自動構成できるようにすることができます。
2番目のシナリオでは、これらのパッケージが見つかる可能性のある情報をアプリケーションに提供します。 この目的のために、@EntityScan。を使用します
@EntityScan アノテーションは、エンティティクラスがメインアプリケーションパッケージまたはそのサブパッケージに配置されていない場合に使用されます。 この状況では、@EntityScanアノテーション内のメイン構成クラスでパッケージまたはパッケージのリストを宣言します。 これにより、アプリケーションで使用されているエンティティの場所がSpringに通知されます。
@Configuration
@EntityScan("com.baeldung.demopackage")
public class EntityScanDemo {
// ...
}
@EntityScan を使用すると、エンティティのSpringBoot自動構成スキャンが無効になることに注意してください。
3. @ComponentScanA表記
@EntityScan およびエンティティと同様に、Springで特定のBeanクラスのセットのみを使用する場合は、@ComponentScanアノテーションを使用します。特定のSpringに初期化させたいBeanクラスの場所。
この注釈は、パラメーターの有無にかかわらず使用できます。 パラメータがない場合、Springは現在のパッケージとそのサブパッケージをスキャンしますが、パラメータ化されると、Springにパッケージを正確に検索する場所を指示します。
パラメーターに関しては、スキャンするパッケージのリストを提供するか( basePackages パラメーターを使用)、またはそれらが属するパッケージもスキャンする特定のクラスに名前を付けることができます( basePackageClasses パラメーターを使用) 。
@ComponentScanアノテーションの使用例を見てみましょう。
@Configuration
@ComponentScan(
basePackages = {"com.baeldung.demopackage"},
basePackageClasses = DemoBean.class)
public class ComponentScanExample {
// ...
}
4. @EntityScan対。 @ComponentScan
結局、これら2つの注釈は完全に異なる目的を意図していると言えます。
それらの類似点は、どちらもSpringアプリケーションの構成に寄与することです。 @EntityScan は、エンティティクラスをスキャンするパッケージを指定する必要があります。 一方、Spring Beanをスキャンするパッケージを指定する場合は、@ComponentScanを選択します。
5. 結論
この短いチュートリアルでは、@EntityScanおよび@ComponentScanアノテーションの使用法について説明し、それらの違いも指摘しました。