1. 序章

Springアプリケーションを作成するときに、エンティティクラスを含むパッケージの特定のリストを指定する必要がある場合があります。 同様に、ある時点で、初期化する必要があるのはSpringBeanの特定のリストだけです。 ここで、@EntityScanまたは@ComponentScanアノテーションを利用できます。

ここで使用する用語を明確にするために、コンポーネントは次のクラスです。 @コントローラ @ Service、@ Repository、@ Component @Beanなど 注釈 。 エンティティは、@Entityアノテーションでマークされたクラスです。

この短いチュートリアルでは、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アノテーションの使用法について説明し、それらの違いも指摘しました。