溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

spring boot的核心注解有哪些

發(fā)布時(shí)間:2021-12-13 10:38:26 來(lái)源:億速云 閱讀:4187 作者:柒染 欄目:軟件技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)spring boot的核心注解有哪些,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

在spring boot中,摒棄了spring以往項(xiàng)目中大量繁瑣的配置,遵循約定大于配置的原則,通過(guò)自身默認(rèn)配置,極大的降低了項(xiàng)目搭建的復(fù)雜度。同樣在spring boot中,大量注解的使用,使得代碼看起來(lái)更加簡(jiǎn)潔,提高開(kāi)發(fā)的效率。這些注解不光包括spring boot自有,也有一些是繼承自spring的。

下面將spring boot項(xiàng)目中常用的一些核心注解歸類(lèi)總結(jié),并結(jié)合實(shí)際使用的角度來(lái)解釋其作用。

一、項(xiàng)目配置注解

1、@SpringBootApplication 注解

查看源碼可發(fā)現(xiàn),@SpringBootApplication是一個(gè)復(fù)合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan這三個(gè)注解。

這三個(gè)注解的作用分別為:

  • @SpringBootConfiguration:標(biāo)注當(dāng)前類(lèi)是配置類(lèi),這個(gè)注解繼承自@Configuration。并會(huì)將當(dāng)前類(lèi)內(nèi)聲明的一個(gè)或多個(gè)以@Bean注解標(biāo)記的方法的實(shí)例納入到srping容器中,并且實(shí)例名就是方法名。

  • @EnableAutoConfiguration:是自動(dòng)配置的注解,這個(gè)注解會(huì)根據(jù)我們添加的組件jar來(lái)完成一些默認(rèn)配置,我們做微服時(shí)會(huì)添加spring-boot-starter-web這個(gè)組件jar的pom依賴,這樣配置會(huì)默認(rèn)配置springmvc 和tomcat。

  • @ComponentScan:掃描當(dāng)前包及其子包下被@Component,@Controller,@Service,@Repository注解標(biāo)記的類(lèi)并納入到spring容器中進(jìn)行管理。等價(jià)于

spring boot的核心注解有哪些

大多數(shù)情況下,這3個(gè)注解會(huì)被同時(shí)使用,基于最佳實(shí)踐,這三個(gè)注解就被做了包裝,成為了@SpringBootApplication注解。

2、@ServletComponentScan:Servlet、Filter、Listener 可以直接通過(guò) @WebServlet、@WebFilter、@WebListener 注解自動(dòng)注冊(cè),這樣通過(guò)注解servlet ,攔截器,監(jiān)聽(tīng)器的功能而無(wú)需其他配置,所以這次相中使用到了filter的實(shí)現(xiàn),用到了這個(gè)注解。

3、@MapperScan:spring-boot支持mybatis組件的一個(gè)注解,通過(guò)此注解指定mybatis接口類(lèi)的路徑,即可完成對(duì)mybatis接口的掃描。

它和@mapper注解是一樣的作用,不同的地方是掃描入口不一樣。@mapper需要加在每一個(gè)mapper接口類(lèi)上面。所以大多數(shù)情況下,都是在規(guī)劃好工程目錄之后,通過(guò)@MapperScan注解配置路徑完成mapper接口的注入。

添加mybatis相應(yīng)組建依賴之后。就可以使用該注解。

spring boot的核心注解有哪些

進(jìn)一步查看mybatis-spring-boot-starter包,可以找到這里已經(jīng)將mybatis做了包裝。

這也是spring的一個(gè)理念,不重復(fù)造輪子,整合優(yōu)秀的資源進(jìn)入spring的體系中。

spring boot的核心注解有哪些

4、資源導(dǎo)入注解:@ImportResource @Import @PropertySource 這三個(gè)注解都是用來(lái)導(dǎo)入自定義的一些配置文件。

@ImportResource(locations={}) 導(dǎo)入其他xml配置文件,需要標(biāo)準(zhǔn)在主配置類(lèi)上。

導(dǎo)入property的配置文件 @PropertySource指定文件路徑,這個(gè)相當(dāng)于使用spring的

@import注解是一個(gè)可以將普通類(lèi)導(dǎo)入到spring容器中做管理

二、controller 層

1、@Controller 表明這個(gè)類(lèi)是一個(gè)控制器類(lèi),和@RequestMapping來(lái)配合使用攔截請(qǐng)求,如果不在method中注明請(qǐng)求的方式,默認(rèn)是攔截get和post請(qǐng)求。這樣請(qǐng)求會(huì)完成后轉(zhuǎn)向一個(gè)視圖解析器。但是在大多微服務(wù)搭建的時(shí)候,前后端會(huì)做分離。所以請(qǐng)求后端只關(guān)注數(shù)據(jù)處理,后端返回json數(shù)據(jù)的話,需要配合@ResponseBody注解來(lái)完成。

這樣一個(gè)只需要返回?cái)?shù)據(jù)的接口就需要3個(gè)注解來(lái)完成,大多情況我們都是需要返回?cái)?shù)據(jù)。也是基于最佳實(shí)踐,所以將這三個(gè)注解進(jìn)一步整合。

@RestController 是@Controller 和@ResponseBody的結(jié)合,一個(gè)類(lèi)被加上@RestController 注解,數(shù)據(jù)接口中就不再需要添加@ResponseBody。更加簡(jiǎn)潔。

同樣的情況,@RequestMapping(value="",method= RequestMethod.GET ),我們都需要明確請(qǐng)求方式。這樣的寫(xiě)法又會(huì)顯得比較繁瑣,于是乎就有了如下的幾個(gè)注解。

普通風(fēng)格Rest風(fēng)格
@RequestMapping(value=“”,method = RequestMethod.GET)@GetMapping(value =“”)
@RequestMapping(value=“”,method = RequestMethod.POST)@PostMapping(value =“”)
@RequestMapping(value=“”,method = RequestMethod.PUT)@PutMapping(value =“”)
@RequestMapping(value=“”,method = RequestMethod.DELETE)@DeleteMapping(value =“”)

這幾個(gè)注解是 @RequestMapping(value="",method= RequestMethod.xxx )的最佳實(shí)踐。為了代碼的更加簡(jiǎn)潔。

2、@CrossOrigin:@CrossOrigin(origins = "", maxAge = 1000) 這個(gè)注解主要是為了解決跨域訪問(wèn)的問(wèn)題。這個(gè)注解可以為整個(gè)controller配置啟用跨域,也可以在方法級(jí)別啟用。

我們?cè)陧?xiàng)目中使用這個(gè)注解是為了解決微服在做定時(shí)任務(wù)調(diào)度編排的時(shí)候,會(huì)訪問(wèn)不同的spider節(jié)點(diǎn)而出現(xiàn)跨域問(wèn)題。

3、@Autowired:這是個(gè)最熟悉的注解,是spring的自動(dòng)裝配,這個(gè)個(gè)注解可以用到構(gòu)造器,變量域,方法,注解類(lèi)型上。當(dāng)我們需要從bean 工廠中獲取一個(gè)bean時(shí),Spring會(huì)自動(dòng)為我們裝配該bean中標(biāo)記為@Autowired的元素。

4、@EnablCaching@EnableCaching: 這個(gè)注解是spring framework中的注解驅(qū)動(dòng)的緩存管理功能。自spring版本3.1起加入了該注解。其作用相當(dāng)于spring配置文件中的cache manager標(biāo)簽。

5、@PathVariable:路徑變量注解,@RequestMapping中用{}來(lái)定義url部分的變量名,如:

spring boot的核心注解有哪些

同樣可以支持變量名加正則表達(dá)式的方式,變量名:[正則表達(dá)式]。

spring boot的核心注解有哪些

三、servcie層注解

1、@Service:這個(gè)注解用來(lái)標(biāo)記業(yè)務(wù)層的組件,我們會(huì)將業(yè)務(wù)邏輯處理的類(lèi)都會(huì)加上這個(gè)注解交給spring容器。事務(wù)的切面也會(huì)配置在這一層。當(dāng)讓 這個(gè)注解不是一定要用。有個(gè)泛指組件的注解,當(dāng)我們不能確定具體作用的時(shí)候 可以用泛指組件的注解托付給spring容器。 

2、@Resource:@Resource和@Autowired一樣都可以用來(lái)裝配bean,都可以標(biāo)注字段上,或者方法上。 @resource注解不是spring提供的,是屬于J2EE規(guī)范的注解。

兩個(gè)之前的區(qū)別就是匹配 方式上有點(diǎn)不同,@Resource默認(rèn)按照名稱方式進(jìn)行bean匹配,@Autowired默認(rèn)按照類(lèi)型方式進(jìn)行bean匹配。

四、持久層注解

1、@Repository:@Repository注解類(lèi)作為DAO對(duì)象,管理操作數(shù)據(jù)庫(kù)的對(duì)象。

總得來(lái)看,@Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所掃描并注入到spring容器來(lái)進(jìn)行管理

@Component是通用注解,其他三個(gè)注解是這個(gè)注解的拓展,并且具有了特定的功能。

通過(guò)這些注解的分層管理,就能將請(qǐng)求處理,義務(wù)邏輯處理,數(shù)據(jù)庫(kù)操作處理分離出來(lái),為代碼解耦,也方便了以后項(xiàng)目的維護(hù)和開(kāi)發(fā)。

所以我們?cè)谡i_(kāi)發(fā)中,如果能用@Service, @Controller, @Repository其中一個(gè)標(biāo)注這個(gè)類(lèi)的定位的時(shí)候,就不要用@Component來(lái)標(biāo)注。

2、@Transactional: 通過(guò)這個(gè)注解可以聲明事務(wù),可以添加在類(lèi)上或者方法上。

在spring boot中 不用再單獨(dú)配置事務(wù)管理,一般情況是我們會(huì)在servcie層添加了事務(wù)注解,即可開(kāi)啟事務(wù)。要注意的是,事務(wù)的開(kāi)啟只能在public 方法上。并且主要事務(wù)切面的回滾條件。正常我們配置rollbackfor exception時(shí) ,如果在方法里捕獲了異常就會(huì)導(dǎo)致事務(wù)切面配置的失效。

五、其他相關(guān)注解

@ControllerAdvice 和 @RestControllerAdvice:通常和@ExceptionHandler、@InitBinder、@ModelAttribute一起配合使用。

@ControllerAdvice 和 @ExceptionHandler 配合完成統(tǒng)一異常攔截處理。

@RestControllerAdvice 是 @ControllerAdvice 和 @ResponseBody的合集,可以將異常以json的格式返回?cái)?shù)據(jù)。

如下面對(duì)數(shù)據(jù)異常返回的統(tǒng)一處理。

spring boot的核心注解有哪些

上述就是小編為大家分享的spring boot的核心注解有哪些了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI