@Controller

您可以使用標準 Spring Bean 定義來定義控制器 Bean。@Controller 構造型允許自動偵測,並與 Spring 對於偵測 Classpath 中 @Component 類別並自動註冊其 Bean 定義的一般支援一致。它也作為註解類別的構造型,指示其作為 Web 组件的角色。

若要啟用自動偵測此類 @Controller Bean,您可以將组件掃描新增至您的 Java 組態,如下列範例所示

  • Java

  • Kotlin

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

	// ...
}
1 掃描 org.example.web 套件。
@Configuration
@ComponentScan("org.example.web") (1)
class WebConfiguration {

	// ...
}
1 掃描 org.example.web 套件。

@RestController 是一個組合註解,它本身使用 @Controller@ResponseBody 進行元註解,表示控制器,其每個方法都繼承型別層級的 @ResponseBody 註解,因此直接寫入回應本文,而不是使用 HTML 範本進行視圖解析和呈現。

AOP 代理

在某些情況下,您可能需要在執行時期使用 AOP 代理裝飾控制器。一個範例是您選擇在控制器上直接使用 @Transactional 註解。在這種情況下,對於控制器而言,我們建議使用基於類別的代理。當在控制器上直接使用此類註解時,這會自動發生。

如果控制器實作介面,且需要 AOP 代理,您可能需要明確配置基於類別的代理。例如,使用 @EnableTransactionManagement,您可以變更為 @EnableTransactionManagement(proxyTargetClass = true),而使用 <tx:annotation-driven/>,您可以變更為 <tx:annotation-driven proxy-target-class="true"/>

請注意,從 6.0 開始,使用介面代理時,Spring WebFlux 不再僅根據介面上型別層級的 @RequestMapping 註解來偵測控制器。請啟用基於類別的代理,否則介面也必須具有 @Controller 註解。