spring-boot
パッケージスキャン
サーチ…
前書き
このトピックでは、春のブートパッケージスキャンの概要を説明します。
いくつかの基本的な情報は、次のリンク( boot-structuring-your-codeを使って )にありますが、より詳細な情報を提供しようとします。
スプリングブート、および一般的なバネは、特定のアノテーションのパッケージを自動的にスキャンして、 beans
やconfiguration
を作成する機能を提供し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
、 @ComponentScan
( Parameters
セクションの各注釈に関する詳細情報)の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
。
-
@SpringBootApplication(scanBasePackages = "com.example.myproject")
- スキャンする基本パッケージとしてcom.example.myproject
を設定します。 -
@SpringBootApplication(scanBasePackageClasses = CustomerController.class)
-scanBasePackages
代わりにtype-safeは、スキャンする基本パッケージとしてCustomerController.java
のパッケージcom.example.myproject.web
を設定します。
自動構成を除く
もう1つの重要な機能は、 exclude
またはexcludeName
(バージョン1.3以降のexcludeName
が存在する)を使用して特定の自動構成クラスをexclude
機能です。
-
@SpringBootApplication(exclude = DemoConfiguration.class)
- 自動パッケージスキャンからDemoConfiguration
を除外します。 -
@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
ます:
- basePackages - スキャンする特定のパッケージを指定するために使用できます。
- useDefaultFilters -偽(真デフォルト)にこの属性を設定することによって、あなたは春がスキャンされませんことを確認することができます
@Component
、@Repository
、@Service
、または@Controller
自動的に。 - includeFilters - 特定の春の注釈/正規表現パターンをパッケージスキャンに含めるために使用できます。
- excludeFilters - 特定の春の注釈/正規表現パターンを除外してパッケージスキャンに含めるために使用できます。
さらに多くの属性がありますが、これらはパッケージスキャンをカスタマイズするために最も一般的に使用されます。
独自の自動設定を作成する
スプリングブートは、あらかじめ作成された多くの自動構成親プロジェクトに基づいています。あなたはすでにスプリングブートスタータープロジェクトに精通しているはずです。
次の簡単な手順を実行することで、独自のスタータープロジェクトを簡単に作成できます。
-
@Configuration
クラスをいくつか作成して、デフォルトBeanを定義します。あなたは次のようにカスタマイズできるよう、自動コンフィギュレーションヘルパーのアノテーションを使用しようとすることは可能な限り外部プロパティを使用する必要があります@AutoConfigureBefore
、@AutoConfigureAfter
、@ConditionalOnBean
、@ConditionalOnMissingBean
あなたは、公式ドキュメント内の各アノテーションのより詳細な情報を見つけることができますなどの条件注釈 - すべての
@Configuration
クラスを集約する自動構成ファイル/ファイルを配置します。 -
spring.factories
という名前のファイルを作成し、src/main/resources/META-INF
ます。 -
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
を見つけることができません。あなたの設定をロードしません