2016-01-26 12 views
18

Spring Bootの@ComponentScanアノテーションと@EnableAutoConfigurationアノテーションの違いは何ですか?これらを追加する必要がありますか?私のアプリケーションは、これらのアノテーションなしでうまく動作します。なぜ私たちがそれらを追加しなければならないのか理解したいだけです。Spring Bootの@ComponentScanと@EnableAutoConfigurationの違いは何ですか?

+4

あなたは[ 'SpringBootApplication' @](http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/SpringBootApplication.html)持っていますか?これは、あなたが言及した2つの代替品です –

+0

はい、私はメインクラスで使用します –

+5

'@ ComponentScan'はアノテーション付きSpringコンポーネントをスキャンするためのものです。' @ EnableAutoConfiguration'は無料の機能を有効にします(設定、 Spring Bootが提供しています。 '@ SprintBootApplication'では、あなたが言及した2つのように、一般的に使用される少数ではなく、単一の注釈を使用することができます。 –

答えて

23

Spring Bootの@ComponentScanアノテーションと@EnableAutoConfigurationアノテーションの違いは何ですか?

@EnableAutoConfiguration annotation tells Springは、追加したjarの依存関係に基づいて、Springの設定方法を「推測」するように指示します。たとえば、HSQLDBがクラスパス上にあり、データベース接続Beanを手動で設定していない場合、Springはインメモリデータベースを自動設定します。

@ComponentScanは、指定されたパッケージ内の他のコンポーネント、構成、およびサービスを検索するようSpringに指示します。 Springは、事前に定義されたプロジェクトパッケージからBeanやコンポーネントを自動スキャン、検出、登録することができます。パッケージが指定されていない場合、現在のクラスパッケージはルートパッケージとみなされます。

これを追加する必要がありますか?

もし私があなたのためにすべてのものを自動構成するためのスプリングブートが必要な場合は、@EnableAutoConfigurationが必要です。手動で追加する必要はありません。春は、提供するアノテーションに基づいて内部的に追加します。

実際には、@SpringBootApplication注釈は、@Configuration、@EnableAutoConfigurationおよび@ComponentScanをデフォルト属性とともに使用することと同等です。

も参照してください:春ブーツの主な利点の

+1

にリンクしているjavadocを見てください。そして、** @ ComponentScan **と** @ ComponentScans **の間の違いは何ですか? –

3

一つは、伝統的なXMLベースの構成に対する駆動の注釈で、@EnableAutoConfigurationが自動的に構成しますSpringアプリケーションはインクルードされたjarファイルに基づいて、デフォルトまたはヘルパーbasを設定しますpom.xmlの依存関係について書かれています。 自動設定は、通常、クラスパスと定義されたBeanに基づいて適用されます。したがって、DataSource、EntityManagerFactory、TransactionManagerなどを定義する必要はありません。魔法のようにクラスパスに基づいて、Spring Bootは自動的に適切なBeanを作成し、それらを登録します。たとえば、クラスパスにtomcat-embedded.jarがある場合は、TomcatEmbeddedServletContainerFactoryが必要になります(独自のEmbeddedServletContainerFactory Beanを定義していない限り)。 @EnableAutoConfigurationには、自動設定を明示的に無効にするためのexclude属性があります。それ以外の場合は、単にpom.xmlから除外することができます。たとえば、Springにtomcatを設定し、spring-bootstarter-ウェブ。

@ComponentScanバネ部材スキャンのスコープを提供し、それは単にも設けられたベースパッケージを進み、等@Bean又は@Autowiredによって必要とされる依存関係を取り上げ、典型的なSpringアプリケーションでは、@ComponentScanがで使用され@Configurationで注釈が付けられたものです。設定クラスには@Beanでアノテーションされたメソッドが含まれています。これらの@Bean注釈付きメソッドは、Springコンテナによって管理されるBeanを生成します。これらのBeanは@ComponentScanアノテーションによって自動的に検出されます。 @Repository、@Service、@Controller、@Configuration、@Componentのような豆を自動検出可能にするいくつかの注釈があります。 以下のコードで、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(); 
    } 

} 
関連する問題