@Controller

標準の Spring Bean 定義を使用して、コントローラー Bean を定義できます。@Controller ステレオタイプは自動検出を可能にし、クラスパス内の @Component クラスを検出し、それらの Bean 定義を自動登録するための Spring 一般サポートと連携しています。また、アノテーション付きクラスのステレオタイプとしても機能し、Web コンポーネントとしてのロールを示します。

そのような @Controller Bean の自動検出を有効にするには、次の例に示すように、Java 構成にコンポーネントスキャンを追加できます。

  • Java

  • Kotlin

@Configuration
@ComponentScan("org.example.web") (1)
public class WebConfig {

	// ...
}
1org.example.web パッケージをスキャンします。
@Configuration
@ComponentScan("org.example.web") (1)
class WebConfig {

	// ...
}
1org.example.web パッケージをスキャンします。

@RestController は、それ自体が @Controller および @ResponseBody でメタアノテーションが付けられた合成アノテーションであり、すべてのメソッドが型レベルの @ResponseBody アノテーションを継承するコントローラーを示します。ビューリゾルバーと HTML テンプレートを使用したレンダリングではなく、レスポンス本文に直接書き込みます。

AOP プロキシ

場合によっては、実行時にコントローラーを AOP プロキシで装飾する必要があります。1 つの例は、コントローラーに直接 @Transactional アノテーションを付けることを選択した場合です。この場合、特にコントローラーの場合は、クラスベースのプロキシを使用することをお勧めします。これは、コントローラーに直接そのようなアノテーションがある場合に自動的に当てはまります。

コントローラーがインターフェースを実装し、AOP プロキシが必要な場合は、クラスベースのプロキシを明示的に設定する必要があります。例: @EnableTransactionManagement では @EnableTransactionManagement(proxyTargetClass = true) に変更でき、<tx:annotation-driven/> では <tx:annotation-driven proxy-target-class="true"/> に変更できます。

6.0 以降、インターフェースプロキシを使用すると、Spring WebFlux は、インターフェース上の型レベルの @RequestMapping アノテーションのみに基づいてコントローラーを検出しなくなることに注意してください。クラスベースのプロキシを有効にしてください。有効にしないと、インターフェースにも @Controller アノテーションが必要です。