@Controller
標準の Spring Bean 定義を使用して、コントローラー Bean を定義できます。@Controller
ステレオタイプは自動検出を可能にし、クラスパス内の @Component
クラスを検出し、それらの Bean 定義を自動登録するための Spring 一般サポートと連携しています。また、アノテーション付きクラスのステレオタイプとしても機能し、Web コンポーネントとしてのロールを示します。
そのような @Controller
Bean の自動検出を有効にするには、次の例に示すように、Java 構成にコンポーネントスキャンを追加できます。
Java
Kotlin
@Configuration
@ComponentScan("org.example.web") (1)
public class WebConfig {
// ...
}
1 | org.example.web パッケージをスキャンします。 |
@Configuration
@ComponentScan("org.example.web") (1)
class WebConfig {
// ...
}
1 | org.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 アノテーションが必要です。 |