4 回答

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
@Controller是傳統(tǒng)控制器中的用戶(hù),引入@RestController注解是為了簡(jiǎn)化RESTful Web服務(wù)的創(chuàng)建。這是一個(gè)結(jié)合了 @Controller 和 @ResponseBody 的便捷注解
@Controller 注釋只是 @Component 類(lèi)的特化,允許通過(guò)類(lèi)路徑掃描自動(dòng)檢測(cè)實(shí)現(xiàn)類(lèi)。
@Controller 通常與請(qǐng)求處理方法上使用的 @RequestMapping 注釋結(jié)合使用。
請(qǐng)求處理方法用@ResponseBody注釋。此注釋允許將返回對(duì)象自動(dòng)序列化到 HttpResponse 中。
@RestController 是控制器的特殊版本。它包含 @Controller 和 @ResponseBody 注釋?zhuān)虼撕?jiǎn)化了控制器實(shí)現(xiàn)。
控制器使用 @RestController 注釋進(jìn)行注釋?zhuān)虼瞬恍枰?@ResponseBody。
控制器類(lèi)的每個(gè)請(qǐng)求處理方法都會(huì)自動(dòng)將返回對(duì)象序列化為 HttpResponse。

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
僅僅因?yàn)?code>@RestController它是一個(gè)@Component
并不意味著您可以通過(guò)切換到更廣泛的功能來(lái)實(shí)現(xiàn)相同的功能@Component
。即使添加了@ResponseBody
,您也無(wú)法實(shí)現(xiàn)等效的功能(如通過(guò)POST
不支持的請(qǐng)求方法所表示的)。
替換@Component
為@Controller
,因?yàn)?a與+@RestController
具有完全相同的功能。您還可以在 的元注釋中看到這一點(diǎn),您會(huì)看到它是元注釋的,而不僅僅是。反過(guò)來(lái),用 進(jìn)行元注釋。@Controller
@ResponseBody
@RestController
@Controller
@Component
@Controller
@Component

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
都是用注解進(jìn)行元注解的@Controller
注解。所有這些注釋本質(zhì)上都是針對(duì)特定用例的注釋的專(zhuān)業(yè)化。該注解一般用于注冊(cè)Spring bean。@RestController
@Service
@Component
@Component
@Component
該@Controller
注解即使是用@Component
inside 進(jìn)行注解的,它也提供了完全不同的功能。通過(guò)使用此注解來(lái)注解一個(gè)類(lèi),我們實(shí)際上是在告訴 spring 掃描此類(lèi)中的@RequestMapping
注解來(lái)注冊(cè) bean 以進(jìn)行請(qǐng)求映射。當(dāng)您僅使用注釋時(shí),不會(huì)發(fā)生這種情況@Component
。
當(dāng) spring 應(yīng)用程序啟動(dòng)時(shí),DispatcherServlet
將啟用(這是一個(gè)在s 上RequestMappingHandlerMapping
?RequestMappingHandlerAdapter
查找注釋的處理程序映射)。因此,當(dāng)請(qǐng)求到達(dá)調(diào)度程序 servlet 時(shí),它會(huì)將其交給將uri 解析為控制器方法 bean。5.x@RequestMapping
@Controller
RequestMappingHandlerMapping
DispatcherServlet
?HandlerMapping
注意:在舊版本的 spring 中,DefaultAnnotationHandlerMapping
?spring 啟用了此功能。
綜上所述:
@Component
是任何 Spring 管理的組件或 bean 的通用構(gòu)造型。@Repository
是持久層的構(gòu)造型。@Service
是服務(wù)層的構(gòu)造型。@Controller
是表示層(spring-MVC)的構(gòu)造型。
該
@Controller
注釋指示特定類(lèi)充當(dāng)控制器的角色。注解的基本目的
@Controller
是充當(dāng)被注解類(lèi)的構(gòu)造型,表明其作用。調(diào)度程序?qū)呙璐祟?lèi)帶注釋的類(lèi)以查找映射方法,檢測(cè)@RequestMapping
注釋?zhuān)ㄕ?qǐng)參閱下一節(jié))。帶注釋的控制器 bean 可以使用調(diào)度程序上下文中的標(biāo)準(zhǔn) Spring bean 定義來(lái)顯式定義。然而,?
@Controller
構(gòu)造型還允許自動(dòng)檢測(cè),與 Spring 2.5 對(duì)檢測(cè)類(lèi)路徑中的組件類(lèi)和自動(dòng)注冊(cè)它們的 bean 定義的一般支持保持一致。

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
您不應(yīng)該得到相同的行為,因?yàn)?@Component 更通用。它僅將您的類(lèi)注冊(cè)為 Spring Managed Bean。但是,@RestController 不僅將您的類(lèi)注冊(cè)為托管 bean,還進(jìn)一步將其注冊(cè)為對(duì)指定 URL 路徑的 HTTP 調(diào)用的入口點(diǎn)。其他特定于層的注釋?zhuān)ㄈ?@Repository、@Configuration 等)也是如此
添加回答
舉報(bào)