讀懂這些spring boot的核心注解,快速配置完成項目搭建

      網(wǎng)友投稿 765 2022-05-30

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

      本文中將spring boot項目中常用的一些核心注解歸類總結(jié),并結(jié)合實際使用的角度來解釋其作用。

      一、項目配置注解

      1、@SpringBootApplication?注解

      讀懂這些spring boot的核心注解,快速配置完成項目搭建

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

      這三個注解的作用分別為:

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

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

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

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

      2、@ServletComponentScan:Servlet、Filter、Listener 可以直接通過?@WebServlet、@WebFilter、@WebListener?注解自動注冊,這樣通過注解servlet ,-,-的功能而無需其他配置,所以這次相中使用到了filter的實現(xiàn),用到了這個注解。

      3、@MapperScan:spring-boot支持mybatis組件的一個注解,通過此注解指定mybatis接口類的路徑,即可完成對mybatis接口的掃描。

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

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

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

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

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

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

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

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

      二、controller 層

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

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

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

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

      這幾個注解是?@RequestMapping(value=””,method= RequestMethod.xxx )的最佳實踐。為了代碼的更加簡潔。

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

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

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

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

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

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

      三、servcie層注解

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

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

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

      四、持久層注解

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

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

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

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

      所以我們在正常開發(fā)中,如果能用@Service,?@Controller,?@Repository其中一個標(biāo)注這個類的定位的時候,就不要用@Component來標(biāo)注。

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

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

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

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

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

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

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

      這里是對平時用到的一些注解做了歸納,及應(yīng)用說明。還有其他更深的知識還需要在后續(xù)的用中繼續(xù)學(xué)習(xí)。

      參考文檔

      https://docs.spring.io/spring-boot/docs/2.1.x/reference/html/

      https://spring.io/projects/spring-boot/

      本文轉(zhuǎn)載自異步社區(qū)。

      軟件開發(fā) Web應(yīng)用防火墻 WAF

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:【云速建站】點擊頁面元素不跳轉(zhuǎn)問題解決方法
      下一篇:php發(fā)送短信驗證碼
      相關(guān)文章
      亚洲AV蜜桃永久无码精品| 亚洲色中文字幕在线播放| yy6080久久亚洲精品| 亚洲另类无码专区丝袜| 久久精品国产亚洲αv忘忧草| 亚洲精品国产啊女成拍色拍| 亚洲日本在线看片| 亚洲国产一区国产亚洲| 久久久久久亚洲精品中文字幕| 亚洲国产精品高清久久久| 亚洲爆乳精品无码一区二区三区| 精品国产亚洲一区二区三区| 亚洲精品无码高潮喷水在线| 亚洲综合国产一区二区三区| 国产l精品国产亚洲区在线观看| 国产亚洲成AV人片在线观黄桃| 亚洲AV无码专区国产乱码电影 | 亚洲国产视频久久| 久久综合久久综合亚洲| 亚洲精品第一国产综合亚AV| 精品亚洲视频在线| 亚洲精品尤物yw在线影院| 国产亚洲日韩在线三区| 久久精品国产69国产精品亚洲| 国产精品亚洲一区二区三区在线 | 亚洲国产精品久久久天堂| 久久伊人久久亚洲综合| 亚洲一区二区三区夜色| 亚洲短视频在线观看| 亚洲人精品亚洲人成在线| 亚洲精品无码永久在线观看男男| 久久久久亚洲国产AV麻豆| 国产国拍亚洲精品福利| 亚洲gv猛男gv无码男同短文| 97久久精品亚洲中文字幕无码| 亚洲最大免费视频网| 亚洲色大18成人网站WWW在线播放| 小说专区亚洲春色校园| 国产性爱在线观看亚洲黄色一级片 | 亚洲国产精品一区二区九九| 久久精品国产亚洲5555|