Spring Boot初心者にありがちなこと(@ComponentScan編)

事象

Spring Bootを試していた際に、コントローラクラスの@RequestMappingが利かなくなり、画面が表示されなくなった。
パッケージ構成のリファクタリング時に発生。

原因

@SpringBootApplicationで実行される@ComponentScanについてよく分かっていないまま、パッケージ構成を変更してしまった。

解説

@SpringBootApplicationで実行されるアノテーションは以下の通り。
 @Target(ElementType.TYPE)
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 @Inherited
 @SpringBootConfiguration
 @EnableAutoConfiguration
 @ComponentScan(excludeFilters = {
  @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
  @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

上記のうち、@ComponentScanは@Componentのアノテーションが付いたクラスを走査し、利用できるようDIする。
(コントローラに付加する@Controllerは、@Componentを内包している。)
@ComponentScanは、@ComponentScanが付いたクラスのパッケージと、その配下のパッケージを走査する。
今回はコントローラ群のリファクタリング時に、@ComponentScanを並列して存在するパッケージに移してしまった。

▼com.example
 ▼application
  ▼Application.java
 ▼controller
  ▼IndexController.java
  ・・・
 ▼entity
 ・・・

対応

@ComponentScanを持つApplicationクラスが最上位に来るよう、パッケージ構成をリファクタリング。

▼com.example
 ▼Application.java
 ▼component
  ▼controller
   ▼IndexController.java
   ・・・
  ▼entity
  ・・・

コメントを残す

メールアドレスが公開されることはありません。