@Controller
你可以透過使用標準的Spring bean定義來定義控制器bean。@Controller 註解允許自動檢測,並與Spring對類路徑中檢測 @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 註解。 |