宣言
サーブレットの WebApplicationContext
で標準 Spring Bean 定義を使用して、コントローラー Bean を定義できます。@Controller
ステレオタイプは、クラスパス内の @Component
クラスの検出およびそれらの Bean 定義の自動登録の Spring 一般サポートに合わせて、自動検出を可能にします。また、アノテーション付きクラスのステレオタイプとしても機能し、Web コンポーネントとしてのロールを示します。
そのような @Controller
Bean の自動検出を有効にするには、次の例に示すように、Java 構成にコンポーネントスキャンを追加できます。
Java
Kotlin
@Configuration
@ComponentScan("org.example.web")
public class WebConfig {
// ...
}
@Configuration
@ComponentScan("org.example.web")
class WebConfig {
// ...
}
次の例は、前述の例に相当する XML 構成を示しています。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="org.example.web"/>
<!-- ... -->
</beans>
@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 MVC は、インターフェース上の型レベルの @RequestMapping アノテーションのみに基づいてコントローラーを検出しなくなることに注意してください。クラスベースのプロキシを有効にしてください。有効にしないと、インターフェースにも @Controller アノテーションが必要です。 |