企業開發項目SpringBoot已經是必備框架了,其中注解是開發中的小工具(誰處可見哦),用好了開發效率大大提升,當然用錯了也會引入缺陷。
@GetMapping
一、Spring Web MVC 與 Spring Bean 注解
Spring Web MVC 注解
@RequestMapping@RequestMapping注解的主要用途是將Web請求與請求處理類中的方法進行映射。Spring MVC和Spring WebFlux都通過RquestMappingHandlerMapping
和RequestMappingHndlerAdapter
兩個類來提供對@RequestMapping注解的支持。@RequestMapping
注解對請求處理類中的請求處理方法進行標注;@RequestMapping
注解擁有以下的六個配置屬性:-
value
:映射的請求URL或者其別名 -
method
:兼容HTTP的方法名 -
params
:根據HTTP參數的存在、缺省或值對請求進行過濾 -
header
:根據HTTP Header的存在、缺省或值對請求進行過濾 -
consume
:設定在HTTP請求正文中允許使用的媒體類型 -
product
:在HTTP響應體中允許使用的媒體類型
HttpMessageConverter
傳遞的,根據請求主體中的參數名與對象的屬性名進行匹配并綁定值。此外,還可以通過@Valid注解對請求主體中的參數進行校驗。下面是一個使用@RequestBody
的示例:
@GetMapping
@GetMapping
注解用于處理HTTP GET請求,并將請求映射到具體的處理方法中。具體來說,@GetMapping是一個組合注解,它相當于是@RequestMapping(method=RequestMethod.GET)
的快捷方式。下面是@GetMapping
的一個使用示例:
@PostMapping
注解用于處理HTTP POST請求,并將請求映射到具體的處理方法中。@PostMapping與@GetMapping一樣,也是一個組合注解,它相當于是@RequestMapping(method=HttpMethod.POST)
的快捷方式。下面是使用@PostMapping
的一個示例:
@PutMapping
注解用于處理HTTP PUT請求,并將請求映射到具體的處理方法中,@PutMapping是一個組合注解,相當于是@RequestMapping(method=HttpMethod.PUT)
的快捷方式。下面是使用@PutMapping
的一個示例:
@DeleteMapping
注解用于處理HTTP DELETE請求,并將請求映射到刪除方法中。@DeleteMapping是一個組合注解,它相當于是@RequestMapping(method=HttpMethod.DELETE)
的快捷方式。下面是使用@DeleteMapping
的一個示例:
@PatchMapping
注解用于處理HTTP PATCH請求,并將請求映射到對應的處理方法中。@PatchMapping相當于是@RequestMapping(method=HttpMethod.PATCH)
的快捷方式。下面是一個簡單的示例:
@ControllerAdvice
是@Component注解的一個延伸注解,Spring會自動掃描并檢測被@ControllerAdvice所標注的類。@ControllerAdvice
需要和@ExceptionHandler
、@InitBinder
以及@ModelAttribute
注解搭配使用,主要是用來處理控制器所拋出的異常信息。首先,我們需要定義一個被@ControllerAdvice
所標注的類,在該類中,定義一個用于處理具體異常的方法,并使用@ExceptionHandler注解進行標記。此外,在有必要的時候,可以使用@InitBinder
在類中進行全局的配置,還可以使用@ModelAttribute配置與視圖相關的參數。使用@ControllerAdvice
注解,就可以快速的創建統一的,自定義的異常處理類。下面是一個使用@ControllerAdvice
的示例代碼:
@ResponseBody
會自動將控制器中方法的返回值寫入到HTTP響應中。特別的,@ResponseBody
注解只能用在被@Controller
注解標記的類中。如果在被@RestController
標記的類中,則方法不需要使用@ResponseBody
注解進行標注。@RestController
相當于是@Controller
和@ResponseBody
的組合注解。下面是使用該注解的一個示例
@ExceptionHander
注解用于標注處理特定類型異常類所拋出異常的方法。當控制器中的方法拋出異常時,Spring會自動捕獲異常,并將捕獲的異常信息傳遞給被@ExceptionHandler
標注的方法。下面是使用該注解的一個示例:
@ResponseStatus
注解可以標注請求處理方法。使用此注解,可以指定響應所需要的HTTP STATUS。特別地,我們可以使用HttpStauts類對該注解的value屬性進行賦值。下面是使用@ResponseStatus
注解的一個示例:
@PathVariable
注解是將方法中的參數綁定到請求URI中的模板變量上。可以通過@RequestMapping
注解來指定URI的模板變量,然后使用@PathVariable
注解將方法中的參數綁定到模板變量上。特別地,@PathVariable
注解允許我們使用value或name屬性來給參數取一個別名。下面是使用此注解的一個示例:
{ }
進行包裹,如果方法的參數名與URI模板變量名一致,則在@PathVariable
中就可以省略別名的定義。下面是一個簡寫的示例:
@PathVariable
中設置require = false
@RequestParam@RequestParam
注解用于將方法的參數與Web請求的傳遞的參數進行綁定。使用@RequestParam
可以輕松的訪問HTTP請求參數的值。下面是使用該注解的代碼示例:
@PathVariable
的配置相同,特別的,如果傳遞的參數為空,還可以通過defaultValue設置一個默認值。示例代碼如下:
@Controller
是@Component
注解的一個延伸,Spring 會自動掃描并配置被該注解標注的類。此注解用于標注Spring MVC的控制器。下面是使用此注解的示例代碼:
@RestController
是在Spring 4.0開始引入的,這是一個特定的控制器注解。此注解相當于@Controller
和@ResponseBody
的快捷方式。當使用此注解時,不需要再在方法上使用@ResponseBody
注解。下面是使用此注解的示例代碼:
@ModelAttribute通過此注解,可以通過模型索引名稱來訪問已經存在于控制器中的model。下面是使用此注解的一個簡單示例:
@PathVariable
和@RequestParam
注解一樣,如果參數名與模型具有相同的名字,則不必指定索引名稱,簡寫示例如下:
@ModelAttribute
對方法進行標注,Spring會將方法的返回值綁定到具體的Model上。示例如下:
@ModelAttribute
注解標注的所有方法都將被執行。@CrossOrigin@CrossOrigin
注解將為請求處理類或請求處理方法提供跨域調用支持。如果我們將此注解標注類,那么類中的所有方法都將獲得支持跨域的能力。使用此注解的好處是可以微調跨域行為。使用此注解的示例如下:
@InitBinder
注解用于標注初始化WebDataBinider的方法,該方法用于對Http請求傳遞的表單數據進行處理,如時間格式化、字符串處理等。下面是使用此注解的示例:
二、Spring Bean 注解在本小節中,主要列舉與Spring Bean相關的4個注解以及它們的使用方式。@ComponentScan
@ComponentScan
注解用于配置Spring需要掃描的被組件注解注釋的類所在的包。可以通過配置其basePackages屬性或者value屬性來配置需要掃描的包路徑。value屬性是basePackages的別名。此注解的用法如下:@Component@Component注解用于標注一個普通的組件類,它沒有明確的業務范圍,只是通知Spring被此注解的類需要被納入到Spring Bean容器中并進行管理。此注解的使用示例如下:
@Service
注解是@Component
的一個延伸(特例),它用于標注業務邏輯類。與@Component
注解一樣,被此注解標注的類,會自動被Spring所管理。下面是使用@Service
注解的示例:
@Repository
@Repository
注解也是@Component
注解的延伸,與@Component
注解一樣,被此注解標注的類會被Spring自動管理起來,@Repository
注解用于標注DAO層的數據持久化類。此注解的用法如下:
三、Spring Dependency Inject 與 Bean Scops注解
Spring DI注解
@DependsOn@DependsOn
注解可以配置Spring IoC容器在初始化一個Bean之前,先初始化其他的Bean對象。下面是此注解使用示例代碼:
initMethod
和destroyMethod
的用法。示例如下:
Scops注解
@Scope@Scope注解可以用來定義@Component標注的類的作用范圍以及@Bean所標記的類的作用范圍。@Scope所限定的作用范圍有:singleton
、prototype
、request
、session
、globalSession
或者其他的自定義范圍。這里以prototype為例子進行講解。當一個Spring Bean被聲明為prototype(原型模式)時,在每次需要使用到該類的時候,Spring IoC容器都會初始化一個新的改類的實例。在定義一個Bean時,可以設置Bean的scope屬性為prototype:scope=“prototype”
,也可以使用@Scope注解設置,如下:@Scope(value=ConfigurableBeanFactory.SCOPE_PROPTOTYPE) 下面將給出兩種不同的方式來使用@Scope注解,示例代碼如下:
四、容器配置注解
@Autowired
@Autowired注解用于標記Spring將要解析和注入的依賴項。此注解可以作用在構造函數、字段和setter方法上。作用于構造函數下面是@Autowired注解標注構造函數的使用示例:
作用于setter方法下面是@Autowired注解標注setter方法的示例代碼:
作用于字段@Autowired注解標注字段是最簡單的,只需要在對應的字段上加入此注解即可,示例代碼如下:
@Primary
當系統中需要配置多個具有相同類型的bean時,@Primary可以定義這些Bean的優先級。下面將給出一個實例代碼來說明這一特性:
輸出結果:
thisissendDingDingmethodmessage.
@PostConstruct與@PreDestroy
值得注意的是,這兩個注解不屬于Spring,它們是源于JSR-250中的兩個注解,位于common-annotations.jar
中。@PostConstruct注解用于標注在Bean被Spring初始化之前需要執行的方法。@PreDestroy注解用于標注Bean被銷毀前需要執行的方法。下面是具體的示例代碼:
@Qualifier
當系統中存在同一類型的多個Bean時,@Autowired在進行依賴注入的時候就不知道該選擇哪一個實現類進行注入。此時,我們可以使用@Qualifier注解來微調,幫助@Autowired選擇正確的依賴項。下面是一個關于此注解的代碼示例:
五、Spring Boot注解
@SpringBootApplication@SpringBootApplication
注解是一個快捷的配置注解,在被它標注的類中,可以定義一個或多個Bean,并自動觸發自動配置Bean和自動掃描組件。此注解相當于@Configuration
、@EnableAutoConfiguration
和@ComponentScan
的組合。在Spring Boot應用程序的主類中,就使用了此注解。示例代碼如下:@SpringBootApplication publicclassApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(Application.class,args); } } @EnableAutoConfiguration@EnableAutoConfiguration注解用于通知Spring,根據當前類路徑下引入的依賴包,自動配置與這些依賴包相關的配置項。@ConditionalOnClass與@ConditionalOnMissingClass這兩個注解屬于類條件注解,它們根據是否存在某個類作為判斷依據來決定是否要執行某些配置。下面是一個簡單的示例代碼:
@Configuration @ConditionalOnClass(DataSource.class) classMySQLAutoConfiguration{ //... } @ConditionalOnBean與@ConditionalOnMissingBean這兩個注解屬于對象條件注解,根據是否存在某個對象作為依據來決定是否要執行某些配置方法。示例代碼如下:
@Bean @ConditionalOnBean(name="dataSource") LocalContainerEntityManagerFactoryBeanentityManagerFactory(){ //... } @Bean @ConditionalOnMissingBean publicMyBeanmyBean(){ //... } @ConditionalOnProperty@ConditionalOnProperty注解會根據Spring配置文件中的配置項是否滿足配置要求,從而決定是否要執行被其標注的方法。示例代碼如下:
@Bean @ConditionalOnProperty(name="alipay",havingValue="on") Alipayalipay(){ returnnewAlipay(); } @ConditionalOnResource此注解用于檢測當某個配置文件存在使,則觸發被其標注的方法,下面是使用此注解的代碼示例:
@ConditionalOnResource(resources="classpath:website.properties") PropertiesaddWebsiteProperties(){ //... } @ConditionalOnWebApplication與@ConditionalOnNotWebApplication這兩個注解用于判斷當前的應用程序是否是Web應用程序。如果當前應用是Web應用程序,則使用Spring WebApplicationContext,并定義其會話的生命周期。下面是一個簡單的示例:
@ConditionalOnWebApplication HealthCheckControllerhealthCheckController(){ //... } @ConditionalExpression此注解可以讓我們控制更細粒度的基于表達式的配置條件限制。當表達式滿足某個條件或者表達式為真的時候,將會執行被此注解標注的方法。
@Bean @ConditionalException("${localstore}&&${local=='true'}") LocalFileStorestore(){ //... } @Conditional@Conditional注解可以控制更為復雜的配置條件。在Spring內置的條件控制注解不滿足應用需求的時候,可以使用此注解定義自定義的控制條件,以達到自定義的要求。下面是使用該注解的簡單示例:
@Conditioanl(CustomConditioanl.class) CustomPropertiesaddCustomProperties(){ //... }
總結
本次課程總結了Spring Boot中常見的各類型注解的使用方式,讓大家能夠統一的對Spring Boot常用注解有一個全面的了解。由于篇幅的原因,關于Spring Boot不常用的一些注解,將在下一次分享中進行補充和說明。審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
spring
+關注
關注
0文章
340瀏覽量
14878 -
MVC
+關注
關注
0文章
73瀏覽量
14058 -
Boot
+關注
關注
0文章
153瀏覽量
36539 -
注解
+關注
關注
0文章
18瀏覽量
2742
原文標題:40 個 SpringBoot 常用注解:讓生產力爆表!
文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
Spring Boot如何實現異步任務
Spring Boot 提供了多種方式來實現異步任務,這里介紹三種主要實現方式。 1、基于注解 @Async @Async
啟動Spring Boot項目應用的三種方法
首先大家了解什么是Spring Boot?Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用
發表于 01-14 17:33
Spring Boot嵌入式Web容器原理是什么
,不需要配置任何特殊的XML配置,為了這個目標,Spring Boot在Spring 4.0框架之上提供了很多特性,幫助應用以“約定優于配置”“開箱即用”的方式來啟動應用并運行上下文。
發表于 12-16 07:57
Spring Boot特有的實踐
Spring Boot是最流行的用于開發微服務的Java框架。在本文中,我將與你分享自2016年以來我在專業開發中使用Spring Boot所采用的最佳實踐。這些內容是基于我的個人經驗
簡述Spring Boot數據校驗
上一篇文章我們了解了Spring Boot Web相關的知識,初步了解了spring-boot-starter-web,還了解了@Contrler和@RestController的差別,如果
Spring Web MVC注解
RequestMapping注解的主要用途是將Web請求與請求處理類中的方法進行映射。Spring MVC和Spring WebFlux都通過`RquestMappingHandlerMapping`和`RequestMappi

Spring Dependency Inject與Bean Scops注解
DependsOn`注解可以配置Spring IoC容器在初始化一個Bean之前,先初始化其他的Bean對象。下面是此注解使用示例代碼:

Spring Boot Actuator快速入門
不知道大家在寫 Spring Boot 項目的過程中,使用過 Spring Boot Actuator 嗎?知道 Spring
Spring Boot啟動 Eureka流程
。Spring Boot 啟動 eureka 的關鍵注解就在 @EnableEurekaServer 上面。 @Target ({ElementType.TYPE}) @Retention

Spring Boot的啟動原理
可能很多初學者會比較困惑,Spring Boot 是如何做到將應用代碼和所有的依賴打包成一個獨立的 Jar 包,因為傳統的 Java 項目打包成 Jar 包之后,需要通過 -classpath 屬性

Spring Boot 的設計目標
,這樣我們就可以盡快的上手。 使用 Spring Boot 來不僅可以創建基于 war 方式部署的傳統Java應用程序,也可以通過創建獨立的不依賴任何容器(如 tomcat 等)

springboot核心注解
Spring Boot 是基于 Spring 框架的開源框架,它可以幫助開發者快速構建、部署和運行獨立的、生產級的 Spring 應用程序。Spri
SpringBoot核心注解由幾個注解組成
Spring Boot 是一個開源的 JavaEE 開發框架,它以簡化 Spring 框架的配置與開發為目標,旨在讓開發者能快速構建獨立、生產級別的應用程序。Spring
評論