Spring Bootの@ComponentScan
アノテーションと@EnableAutoConfiguration
アノテーションの違いは何ですか?これらを追加する必要がありますか?私のアプリケーションは、これらの注釈がなくても非常にうまく機能します。なぜ追加する必要があるのかを理解したいだけです。
Spring Bootの@ComponentScanアノテーションと@EnableAutoConfigurationアノテーションの違いは何ですか?
@EnableAutoConfiguration
注釈は、追加したjar依存関係に基づいて、Spring Bootに、Springの構成方法を「推測」するよう指示します。たとえば、HSQLDBがクラスパス上にあり、データベース接続Beanを手動で構成していない場合、Springはインメモリデータベースを自動構成します。
@ComponentScan
は、指定されたパッケージ内の他のコンポーネント、構成、およびサービスを検索するようSpringに指示します。 Springは、事前に定義されたプロジェクトパッケージからBeanまたはコンポーネントを自動スキャン、検出、および登録できます。パッケージが指定されていない場合、現在のクラスパッケージがルートパッケージとして取得されます。
これらを追加する必要はありますか?
Springブートですべてを自動設定する必要がある場合 @EnableAutoConfiguration
が必要です。手動で追加する必要はありません。ユーザーが指定した注釈に基づいて、Springが内部的に追加します。
実際に @SpringBootApplication
アノテーションは、デフォルト属性で @Configuration
、 @EnableAutoConfiguration
および @ComponentScan
を使用するのと同等です。
以下も参照してください:
Spring Bootの主な利点の1つは、従来のxmlベースの構成と比較したアノテーション駆動です。@ EnableAutoConfiguration含まれるjarファイルに基づいてSpringアプリケーションを自動的に構成し、デフォルトまたはヘルパーをセットアップしますpom.xmlの依存関係に基づきます。通常、自動構成はクラスパスと定義されたBeanに基づいて適用されます。したがって、DataSource、EntityManagerFactory、TransactionManagerなどを定義する必要はなく、クラスパスに基づいて魔法のように、Spring Bootは適切なBeanを自動的に作成し、登録します。たとえば、クラスパスにTomcat-embedded.jarがある場合、TomcatEmbeddedServletContainerFactoryが必要になる可能性があります(独自のEmbeddedServletContainerFactory Beanを定義していない場合)。 @EnableAutoConfigurationにはexclude属性があり、自動設定を明示的に無効にしますウェブ。
@ ComponentScanはスプリングコンポーネントスキャンのスコープを提供しますが、単純に提供されたベースパッケージに進み、@ Beanや@Autowiredなどに必要な依存関係を取得します。典型的なSpringアプリケーションである@ComponentScanは、@ Configurationアノテーションが付けられた構成クラスで使用されます。構成クラスには、@ Beanアノテーションが付けられたメソッドが含まれます。これらの@Beanアノテーション付きメソッドは、Springコンテナによって管理されるBeanを生成します。これらのBeanは、@ ComponentScanアノテーションによって自動検出されます。 @Repository、@Service、@Controller、@Configuration、@ComponentのようなBeanを自動検出可能にするアノテーションがいくつかあります。以下のコードでは、SpringはBeanAクラスを含むパッケージからスキャンを開始します。
@Configuration
@ComponentScan(basePackageClasses = BeanA.class)
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
public class Config {
@Bean
public BeanA beanA(){
return new BeanA();
}
@Bean
public BeanB beanB{
return new BeanB();
}
}