@Controller

您可以使用標準的 Spring bean 定義來定義控制器 bean。@Controller 註解允許自動檢測,並且與 Spring 對類路徑中 @Component 類的通用檢測和自動註冊 bean 定義的支援一致。它也作為被註解類的刻板印象(stereotype),指示其作為 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 註解。