サーチ…


前書き

このトピックでは、春のブートパッケージスキャンの概要を説明します。

いくつかの基本的な情報は、次のリンク( boot-structuring-your-codeを使って )にありますが、より詳細な情報を提供しようとします。

スプリングブート、および一般的なバネは、特定のアノテーションのパッケージを自動的にスキャンして、 beansconfigurationを作成する機能を提供しconfiguration

パラメーター

注釈詳細
@SpringBootApplication メインスプリングブートアプリケーション注釈。アプリケーションで1回使用され、メインメソッドが含まれており、パッケージスキャンのメインパッケージとして機能します
@SpringBootConfiguration クラスがSpringブートアプリケーションを提供することを示します。 @SpringBootApplicationを設定することで、アプリケーション内で一度だけ宣言されます@SpringBootApplication
@EnableAutoConfiguration Springアプリケーションコンテキストの自動設定を有効にします。 @SpringBootApplicationを設定することで、アプリケーション内で一度だけ宣言されます@SpringBootApplication
@ComponentScan 特定のパッケージおよびその子に対して自動パッケージスキャンを開始するか、カスタムパッケージスキャンを設定するために使用されます
@Configuration 1つ以上の@Beanメソッドを宣言するために使用されます。伝統的なxml構成の代わりに1つ以上の@Beanメソッドを宣言するために、自動パッケージスキャンによって選択できます
@豆メソッドがSpringコンテナによって管理されるBeanを生成することを示します。 @Beanアノテートされたメソッドは@Configurationアノテートされたクラスに置かれ、パッケージのスキャンによって選択され、javaコンフィグレーションベースのBeanを作成します。
@成分クラスを@Componentとして宣言することで、アノテーションベースの設定とクラスパススキャンを使用するときに自動検出の候補になります。通常、 @Component注釈が付けられたクラスは、アプリケーション内のbeanになります
@リポジトリもともとDomain-Driven Design(Evans、2003)によって「記憶装置をカプセル化するためのメカニズム」として定義されていますが、通常はspring data用のRepositoryを示すために使用されます
@サービス実際には@Componentと非常によく似ています。 Domain-Driven Design(Evans、2003)が「カプセル化されていない状態でモデルに単独で存在するインターフェースとして提供される操作」として最初に定義されています。
@コントローラ注釈付きクラスが「コントローラ」(Webコントローラなど)であることを示します。
@RestController @Controller@ResponseBody注釈が付けられた便利なアノテーションです。既定で選択された@Controllerアノテーションが含まれているため、デフォルトで自動的に選択されます。

@SpringBootApplication

優れた自動パッケージスキャンのためにスプリングブートを使用してコードを構築する最も基本的な方法は、 @SpringBootApplicationアノテーションを使用すること@SpringBootApplication 。この注釈は、 @SpringBootConfiguration@EnableAutoConfiguration@ComponentScanParametersセクションの各注釈に関する詳細情報)の3つの注釈を自動スキャンに役立ちます。

@SpringBootApplicationは普通はメインパッケージに置かれ、他のすべてのコンポーネントはこのファイルの下のパッケージに置かれます:

com
 +- example
     +- myproject
         +- Application.java (annotated with @SpringBootApplication)
         |
         +- domain
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

特に記載がない限り、スプリングブーツを検出@Configuration@Component@Repository@Service@Controller@RestController (自動的にスキャンパッケージの下に注釈を@Configuration@RestControllerそれらがで注釈されているので選ばれている@Component@Controller応じて)。

基本コードの例:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
    
}

明示的にパッケージ/クラスを設定する

バージョン1.3以来、あなたはまた、設定することで、特定のパッケージをスキャンするために、スプリングブーツを伝えることができscanBasePackagesまたはscanBasePackageClassesして@SpringBootApplicationの代わりに、指定@ComponentScan

  1. @SpringBootApplication(scanBasePackages = "com.example.myproject") - スキャンする基本パッケージとしてcom.example.myprojectを設定します。
  2. @SpringBootApplication(scanBasePackageClasses = CustomerController.class) - scanBasePackages代わりにtype-safeは、スキャンする基本パッケージとしてCustomerController.javaのパッケージcom.example.myproject.webを設定します。

自動構成を除く

もう1つの重要な機能は、 excludeまたはexcludeName (バージョン1.3以降のexcludeNameが存在する)を使用して特定の自動構成クラスをexclude機能です。

  1. @SpringBootApplication(exclude = DemoConfiguration.class) - 自動パッケージスキャンからDemoConfigurationを除外します。
  2. @SpringBootApplication(excludeName = "DemoConfiguration") - 完全に分類されたクラスのクラスを使用して同じことを行います。

@ComponentScan

より複雑なパッケージスキャンを設定するために@ComponentScanを使うことができます。いくつかの@ComponentScan注釈を集約するコンテナ注釈として機能する@ComponentScansもあります。

基本的なコード例

@ComponentScan
public class DemoAutoConfiguration {
}

@ComponentScans({@ComponentScan("com.example1"), @ComponentScan("com.example2")})
public class DemoAutoConfiguration {
}

述べる@ComponentScanなしの構成では、のような役割を果たし@SpringBootApplicationと、このアノテーションを付けたクラスの下にあるすべてのパッケージをスキャンします。

この例では、 @ComponentScan有用な属性のいくつかを@ComponentScanます:

  1. basePackages - スキャンする特定のパッケージを指定するために使用できます。
  2. useDefaultFilters -偽(真デフォルト)にこの属性を設定することによって、あなたは春がスキャンされませんことを確認することができます@Component@Repository@Service 、または@Controller自動的に。
  3. includeFilters - 特定の春の注釈/正規表現パターンをパッケージスキャンに含めるために使用できます。
  4. excludeFilters - 特定の春の注釈/正規表現パターンを除外してパッケージスキャンに含めるために使用できます。

さらに多くの属性がありますが、これらはパッケージスキャンをカスタマイズするために最も一般的に使用されます。

独自の自動設定を作成する

スプリングブートは、あらかじめ作成された多くの自動構成親プロジェクトに基づいています。あなたはすでにスプリングブートスタータープロジェクトに精通しているはずです。

次の簡単な手順を実行することで、独自のスタータープロジェクトを簡単に作成できます。

  1. @Configurationクラスをいくつか作成して、デフォルトBeanを定義します。あなたは次のようにカスタマイズできるよう、自動コンフィギュレーションヘルパーのアノテーションを使用しようとすることは可能な限り外部プロパティを使用する必要があります@AutoConfigureBefore@AutoConfigureAfter@ConditionalOnBean@ConditionalOnMissingBeanあなたは、公式ドキュメント内の各アノテーションのより詳細な情報を見つけることができますなどの条件注釈
  2. すべての@Configurationクラスを集約する自動構成ファイル/ファイルを配置します。
  3. spring.factoriesという名前のファイルを作成し、 src/main/resources/META-INFます。
  4. spring.factoriesでは、 @Configurationクラスのカンマ区切りの値でorg.springframework.boot.autoconfigure.EnableAutoConfigurationプロパティを設定します。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.mycorp.libx.autoconfigure.LibXAutoConfiguration,\
com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration

このメソッドを使用すると、spring-bootによって選択される独自の自動構成クラスを作成できます。 Spring-bootは、 spring.factoriesファイルのすべてのmaven / spring.factories依存関係を自動的にスキャンし、 spring.factories場合は、その中で指定された@Configurationクラスをすべて自動構成プロセスに追加します。

あなたのauto-configurationスタータープロジェクトには、プロジェクトを実行可能なJARとしてパッケージ化し、クラスパスによって意図したとおりにロードされないため、 spring.factories spring boot maven pluginが含まれていないことを確認してください。 - spring.factoriesブートはspring.factoriesを見つけることができません。あなたの設定をロードしません



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow