質問するログイン新規登録

回答編集履歴

2

質問者様の例について言及を追加

2021/02/13 16:01

投稿

maigo_name
maigo_name

スコア559

answer CHANGED
@@ -3,6 +3,12 @@
3
3
  ベースとなるアプリケーションと「同じパッケージ」と「それ以下の階層のパッケージ」をスキャンするため、
4
4
  質問者様の疑問に感じるような挙動が発生しているのだと予想します。
5
5
 
6
+ 質問者様のケースでは、
7
+ 「demo 配下に Controller を置いた」場合、「Application と同じパッケージ」のため、コンポーネントスキャンが可能でしたが、
8
+ 「app 配下に Controller を置いた」場合、「Application とは別のパッケージ」のため、コンポーネントスキャンがされていないのだと思います。
9
+ そのため、設定・実装したルーティングが取り込まれず、表示がうまくできていないものと思われます。
10
+
11
+
6
12
  ここでベースのアプリケーションクラスというのは
7
13
  `@SpringBootApplication` のアノテーションのついたクラスのことです。
8
14
 

1

日本語が読みにくかったのでちょっと修正

2021/02/13 16:01

投稿

maigo_name
maigo_name

スコア559

answer CHANGED
@@ -1,8 +1,13 @@
1
- SpringBoot のコンポーネントスキャンはベースとなるアプリケーションと
1
+ SpringBoot のコンポーネントスキャンは
2
+ デフォルトでは
3
+ ベースとなるアプリケーションと「同じパッケージ」と「それ以下の階層のパッケージ」をスキャンするため、
2
- 同じパッケージとそれ以下階層のスキャンすから発生しているのだと予想します。
4
+ 質問者様疑問に感じような挙動が発生しているのだと予想します。
3
5
 
6
+ ここでベースのアプリケーションクラスというのは
4
- ベースのアプリケーションクラスというのは `@SpringBootApplication` のアノテーションのついたクラスのことです。
7
+ `@SpringBootApplication` のアノテーションのついたクラスのことです。
5
8
 
9
+ 関係性を表すと、
10
+ スキャンできるクラス、できないクラスの例としては以下のようになります。
6
11
  ```
7
12
  com.sample
8
13
  ├app
@@ -11,10 +16,11 @@
11
16
  | ├ Application.java (@SpringBootApplication がついてる)
12
17
  | └ AppController.java (同じパッケージなのでスキャンできる)
13
18
  └ another
14
- └ AnotherController.java (app 別のパッケージなのでスキャンできない)
19
+ └ AnotherController.java (app とは別のパッケージなのでスキャンできない)
15
20
  ```
16
21
 
22
+ デフォルトの場合、と書きましたが、設定次第で並列のパッケージも読み取ることは可能です。
17
- 並列のパッケージもスキャンしたい場合の例としては、
23
+ 並列のパッケージもスキャンしたい場合の対応の例としては、
18
24
  `@SpringBootApplication` の引数に `scanBasePackages={<引き込みたい親のpackage 名>}`を指定します。
19
25
  上の例だと、com.sample 以下をスキャンしたい場合は、
20
26
  アプリケーションクラス(例だと `Application.java`に)以下を設定します