<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          40 個(gè) SpringBoot 常用注解:讓生產(chǎn)力爆表!

          共 8363字,需瀏覽 17分鐘

           ·

          2022-06-14 10:59

          往期熱門文章:

          1、BigDecimal使用不當(dāng),造成P0事故!

          2、改造BeanUtils,優(yōu)雅實(shí)現(xiàn)List數(shù)據(jù)拷貝

          3、SpringBoot 啟動時(shí)自動執(zhí)行代碼的幾種方式,還有誰不會??

          4、讓人上癮的新一代開發(fā)神器,徹底告別Controller、Service、Dao等方法

          5、延時(shí)消息常見實(shí)現(xiàn)方案

          來源:ramostear.com
          • 一、Spring Web MVC 與 Spring Bean 注解
            • Spring Web MVC 注解
          • 二、Spring Bean 注解
          • 三、Spring Dependency Inject 與 Bean Scops注解
            • Spring DI注解
            • Scops注解
          • 四、容器配置注解
            • @Autowired
            • @Primary
            • @PostConstruct與@PreDestroy
            • @Qualifier
          • 五、Spring Boot注解
          • 總結(jié)

          企業(yè)開發(fā)項(xiàng)目SpringBoot已經(jīng)是必備框架了,其中注解是開發(fā)中的小工具(誰處可見哦),用好了開發(fā)效率大大提升,當(dāng)然用錯(cuò)了也會引入缺陷。

          一、Spring Web MVC 與 Spring Bean 注解

          Spring Web MVC 注解

          @RequestMapping
          @RequestMapping注解的主要用途是將Web請求與請求處理類中的方法進(jìn)行映射。Spring MVC和Spring WebFlux都通過RquestMappingHandlerMappingRequestMappingHndlerAdapter兩個(gè)類來提供對@RequestMapping注解的支持。
          @RequestMapping注解對請求處理類中的請求處理方法進(jìn)行標(biāo)注;@RequestMapping注解擁有以下的六個(gè)配置屬性:
          • value:映射的請求URL或者其別名
          • method:兼容HTTP的方法名
          • params:根據(jù)HTTP參數(shù)的存在、缺省或值對請求進(jìn)行過濾
          • header:根據(jù)HTTP Header的存在、缺省或值對請求進(jìn)行過濾
          • consume:設(shè)定在HTTP請求正文中允許使用的媒體類型
          • product:在HTTP響應(yīng)體中允許使用的媒體類型
          提示:在使用@RequestMapping之前,請求處理類還需要使用@Controller或@RestController進(jìn)行標(biāo)記
          下面是使用@RequestMapping的兩個(gè)示例:


          @RequestMapping還可以對類進(jìn)行標(biāo)記,這樣類中的處理方法在映射請求路徑時(shí),會自動將類上@RequestMapping設(shè)置的value拼接到方法中映射路徑之前,如下:


          @RequestBody
          @RequestBody在處理請求方法的參數(shù)列表中使用,它可以將請求主體中的參數(shù)綁定到一個(gè)對象中,請求主體參數(shù)是通過HttpMessageConverter傳遞的,根據(jù)請求主體中的參數(shù)名與對象的屬性名進(jìn)行匹配并綁定值。此外,還可以通過@Valid注解對請求主體中的參數(shù)進(jìn)行校驗(yàn)。
          下面是一個(gè)使用@RequestBody的示例:





          @GetMapping
          @GetMapping注解用于處理HTTP GET請求,并將請求映射到具體的處理方法中。具體來說,@GetMapping是一個(gè)組合注解,它相當(dāng)于是@RequestMapping(method=RequestMethod.GET)的快捷方式。
          下面是@GetMapping的一個(gè)使用示例:


          @PostMapping
          @PostMapping注解用于處理HTTP POST請求,并將請求映射到具體的處理方法中。@PostMapping與@GetMapping一樣,也是一個(gè)組合注解,它相當(dāng)于是@RequestMapping(method=HttpMethod.POST)的快捷方式。
          下面是使用@PostMapping的一個(gè)示例:


          @PutMapping
          @PutMapping注解用于處理HTTP PUT請求,并將請求映射到具體的處理方法中,@PutMapping是一個(gè)組合注解,相當(dāng)于是@RequestMapping(method=HttpMethod.PUT)的快捷方式。
          下面是使用@PutMapping的一個(gè)示例:


          @DeleteMapping
          @DeleteMapping注解用于處理HTTP DELETE請求,并將請求映射到刪除方法中。@DeleteMapping是一個(gè)組合注解,它相當(dāng)于是@RequestMapping(method=HttpMethod.DELETE)的快捷方式。
          下面是使用@DeleteMapping的一個(gè)示例:


          @PatchMapping
          @PatchMapping注解用于處理HTTP PATCH請求,并將請求映射到對應(yīng)的處理方法中。@PatchMapping相當(dāng)于是@RequestMapping(method=HttpMethod.PATCH)的快捷方式。
          下面是一個(gè)簡單的示例:


          @ControllerAdvice
          @ControllerAdvice是@Component注解的一個(gè)延伸注解,Spring會自動掃描并檢測被@ControllerAdvice所標(biāo)注的類。@ControllerAdvice需要和@ExceptionHandler@InitBinder以及@ModelAttribute注解搭配使用,主要是用來處理控制器所拋出的異常信息。
          首先,我們需要定義一個(gè)被@ControllerAdvice所標(biāo)注的類,在該類中,定義一個(gè)用于處理具體異常的方法,并使用@ExceptionHandler注解進(jìn)行標(biāo)記。
          此外,在有必要的時(shí)候,可以使用@InitBinder在類中進(jìn)行全局的配置,還可以使用@ModelAttribute配置與視圖相關(guān)的參數(shù)。使用@ControllerAdvice注解,就可以快速的創(chuàng)建統(tǒng)一的,自定義的異常處理類。
          下面是一個(gè)使用@ControllerAdvice的示例代碼:


          @ResponseBody
          @ResponseBody會自動將控制器中方法的返回值寫入到HTTP響應(yīng)中。特別的,@ResponseBody注解只能用在被@Controller注解標(biāo)記的類中。如果在被@RestController標(biāo)記的類中,則方法不需要使用@ResponseBody注解進(jìn)行標(biāo)注。@RestController相當(dāng)于是@Controller@ResponseBody的組合注解。
          下面是使用該注解的一個(gè)示例


          @ExceptionHandler
          @ExceptionHander注解用于標(biāo)注處理特定類型異常類所拋出異常的方法。當(dāng)控制器中的方法拋出異常時(shí),Spring會自動捕獲異常,并將捕獲的異常信息傳遞給被@ExceptionHandler標(biāo)注的方法。
          下面是使用該注解的一個(gè)示例:


          @ResponseStatus
          @ResponseStatus注解可以標(biāo)注請求處理方法。使用此注解,可以指定響應(yīng)所需要的HTTP STATUS。特別地,我們可以使用HttpStauts類對該注解的value屬性進(jìn)行賦值。
          下面是使用@ResponseStatus注解的一個(gè)示例:


          @PathVariable
          @PathVariable注解是將方法中的參數(shù)綁定到請求URI中的模板變量上。可以通過@RequestMapping注解來指定URI的模板變量,然后使用@PathVariable注解將方法中的參數(shù)綁定到模板變量上。
          特別地,@PathVariable注解允許我們使用value或name屬性來給參數(shù)取一個(gè)別名。下面是使用此注解的一個(gè)示例:


          模板變量名需要使用{ }進(jìn)行包裹,如果方法的參數(shù)名與URI模板變量名一致,則在@PathVariable中就可以省略別名的定義。
          下面是一個(gè)簡寫的示例:


          提示:如果參數(shù)是一個(gè)非必須的,可選的項(xiàng),則可以在@PathVariable中設(shè)置require = false
          @RequestParam
          @RequestParam注解用于將方法的參數(shù)與Web請求的傳遞的參數(shù)進(jìn)行綁定。使用@RequestParam可以輕松的訪問HTTP請求參數(shù)的值。
          下面是使用該注解的代碼示例:


          該注解的其他屬性配置與@PathVariable的配置相同,特別的,如果傳遞的參數(shù)為空,還可以通過defaultValue設(shè)置一個(gè)默認(rèn)值。示例代碼如下:


          @Controller
          @Controller@Component注解的一個(gè)延伸,Spring 會自動掃描并配置被該注解標(biāo)注的類。此注解用于標(biāo)注Spring MVC的控制器。下面是使用此注解的示例代碼:


          @RestController
          @RestController是在Spring 4.0開始引入的,這是一個(gè)特定的控制器注解。此注解相當(dāng)于@Controller@ResponseBody的快捷方式。當(dāng)使用此注解時(shí),不需要再在方法上使用@ResponseBody注解。
          下面是使用此注解的示例代碼:


          @ModelAttribute
          通過此注解,可以通過模型索引名稱來訪問已經(jīng)存在于控制器中的model。下面是使用此注解的一個(gè)簡單示例:


          @PathVariable@RequestParam注解一樣,如果參數(shù)名與模型具有相同的名字,則不必指定索引名稱,簡寫示例如下:


          特別地,如果使用@ModelAttribute對方法進(jìn)行標(biāo)注,Spring會將方法的返回值綁定到具體的Model上。示例如下:


          在Spring調(diào)用具體的處理方法之前,被@ModelAttribute注解標(biāo)注的所有方法都將被執(zhí)行。
          @CrossOrigin
          @CrossOrigin注解將為請求處理類或請求處理方法提供跨域調(diào)用支持。如果我們將此注解標(biāo)注類,那么類中的所有方法都將獲得支持跨域的能力。使用此注解的好處是可以微調(diào)跨域行為。使用此注解的示例如下:


          @InitBinder
          @InitBinder注解用于標(biāo)注初始化WebDataBinider 的方法,該方法用于對Http請求傳遞的表單數(shù)據(jù)進(jìn)行處理,如時(shí)間格式化、字符串處理等。下面是使用此注解的示例:


          二、Spring Bean 注解
          在本小節(jié)中,主要列舉與Spring Bean相關(guān)的4個(gè)注解以及它們的使用方式。
          @ComponentScan
          @ComponentScan注解用于配置Spring需要掃描的被組件注解注釋的類所在的包。可以通過配置其basePackages屬性或者value屬性來配置需要掃描的包路徑。value屬性是basePackages的別名。此注解的用法如下:
          @Component
          @Component注解用于標(biāo)注一個(gè)普通的組件類,它沒有明確的業(yè)務(wù)范圍,只是通知Spring被此注解的類需要被納入到Spring Bean容器中并進(jìn)行管理。此注解的使用示例如下:


          @Service
          @Service注解是@Component的一個(gè)延伸(特例),它用于標(biāo)注業(yè)務(wù)邏輯類。與@Component注解一樣,被此注解標(biāo)注的類,會自動被Spring所管理。下面是使用@Service注解的示例:


          @Repository
          @Repository注解也是@Component注解的延伸,與@Component注解一樣,被此注解標(biāo)注的類會被Spring自動管理起來,@Repository注解用于標(biāo)注DAO層的數(shù)據(jù)持久化類。此注解的用法如下:


          三、Spring Dependency Inject 與 Bean Scops注解

          Spring DI注解

          @DependsOn
          @DependsOn注解可以配置Spring IoC容器在初始化一個(gè)Bean之前,先初始化其他的Bean對象。下面是此注解使用示例代碼:


          @Bean
          @Bean注解主要的作用是告知Spring,被此注解所標(biāo)注的類將需要納入到Bean管理工廠中。@Bean注解的用法很簡單,在這里,著重介紹@Bean注解中initMethoddestroyMethod的用法。示例如下:


          Scops注解

          @Scope
          @Scope注解可以用來定義@Component標(biāo)注的類的作用范圍以及@Bean所標(biāo)記的類的作用范圍。@Scope所限定的作用范圍有:singletonprototyperequestsessionglobalSession或者其他的自定義范圍。這里以prototype為例子進(jìn)行講解。
          當(dāng)一個(gè)Spring Bean被聲明為prototype(原型模式)時(shí),在每次需要使用到該類的時(shí)候,Spring IoC容器都會初始化一個(gè)新的改類的實(shí)例。在定義一個(gè)Bean時(shí),可以設(shè)置Bean的scope屬性為prototype:scope=“prototype”,也可以使用@Scope注解設(shè)置,如下:
          @Scope(value=ConfigurableBeanFactory.SCOPE_PROPTOTYPE)
          下面將給出兩種不同的方式來使用@Scope注解,示例代碼如下:


          @Scope 單例模式
          當(dāng)@Scope的作用范圍設(shè)置成Singleton時(shí),被此注解所標(biāo)注的類只會被Spring IoC容器初始化一次。在默認(rèn)情況下,Spring IoC容器所初始化的類實(shí)例都為singleton。同樣的原理,此情形也有兩種配置方式,示例代碼如下:


          四、容器配置注解

          @Autowired

          @Autowired注解用于標(biāo)記Spring將要解析和注入的依賴項(xiàng)。此注解可以作用在構(gòu)造函數(shù)、字段和setter方法上。
          作用于構(gòu)造函數(shù)
          下面是@Autowired注解標(biāo)注構(gòu)造函數(shù)的使用示例:


          作用于setter方法
          下面是@Autowired注解標(biāo)注setter方法的示例代碼:


          作用于字段
          @Autowired注解標(biāo)注字段是最簡單的,只需要在對應(yīng)的字段上加入此注解即可,示例代碼如下:


          @Primary

          當(dāng)系統(tǒng)中需要配置多個(gè)具有相同類型的bean時(shí),@Primary可以定義這些Bean的優(yōu)先級。下面將給出一個(gè)實(shí)例代碼來說明這一特性:



          輸出結(jié)果:
          this?is?send?DingDing?method?message.

          @PostConstruct與@PreDestroy

          值得注意的是,這兩個(gè)注解不屬于Spring,它們是源于JSR-250中的兩個(gè)注解,位于common-annotations.jar中。@PostConstruct注解用于標(biāo)注在Bean被Spring初始化之前需要執(zhí)行的方法。@PreDestroy注解用于標(biāo)注Bean被銷毀前需要執(zhí)行的方法。下面是具體的示例代碼:


          @Qualifier

          當(dāng)系統(tǒng)中存在同一類型的多個(gè)Bean時(shí),@Autowired在進(jìn)行依賴注入的時(shí)候就不知道該選擇哪一個(gè)實(shí)現(xiàn)類進(jìn)行注入。此時(shí),我們可以使用@Qualifier注解來微調(diào),幫助@Autowired選擇正確的依賴項(xiàng)。下面是一個(gè)關(guān)于此注解的代碼示例:


          五、Spring Boot注解

          @SpringBootApplication
          @SpringBootApplication注解是一個(gè)快捷的配置注解,在被它標(biāo)注的類中,可以定義一個(gè)或多個(gè)Bean,并自動觸發(fā)自動配置Bean和自動掃描組件。此注解相當(dāng)于@Configuration@EnableAutoConfiguration@ComponentScan的組合。
          在Spring Boot應(yīng)用程序的主類中,就使用了此注解。示例代碼如下:
          @SpringBootApplication
          public?class?Application{
          ????public?static?void?main(String?[]?args){
          ????????SpringApplication.run(Application.class,args);
          ????}
          }
          @EnableAutoConfiguration
          @EnableAutoConfiguration注解用于通知Spring,根據(jù)當(dāng)前類路徑下引入的依賴包,自動配置與這些依賴包相關(guān)的配置項(xiàng)。
          @ConditionalOnClass與@ConditionalOnMissingClass
          這兩個(gè)注解屬于類條件注解,它們根據(jù)是否存在某個(gè)類作為判斷依據(jù)來決定是否要執(zhí)行某些配置。下面是一個(gè)簡單的示例代碼:
          @Configuration
          @ConditionalOnClass(DataSource.class)
          class?MySQLAutoConfiguration?
          {
          ????//...
          }
          @ConditionalOnBean與@ConditionalOnMissingBean
          這兩個(gè)注解屬于對象條件注解,根據(jù)是否存在某個(gè)對象作為依據(jù)來決定是否要執(zhí)行某些配置方法。示例代碼如下:
          @Bean
          @ConditionalOnBean(name="dataSource")
          LocalContainerEntityManagerFactoryBean?entityManagerFactory(){
          ????????//...
          }
          @Bean
          @ConditionalOnMissingBean
          public?MyBean?myBean(){
          ????????//...
          }
          @ConditionalOnProperty
          @ConditionalOnProperty注解會根據(jù)Spring配置文件中的配置項(xiàng)是否滿足配置要求,從而決定是否要執(zhí)行被其標(biāo)注的方法。示例代碼如下:
          @Bean
          @ConditionalOnProperty(name="alipay",havingValue="on")
          Alipay?alipay(){
          ????????return?new?Alipay();
          ?}
          @ConditionalOnResource
          此注解用于檢測當(dāng)某個(gè)配置文件存在使,則觸發(fā)被其標(biāo)注的方法,下面是使用此注解的代碼示例:
          @ConditionalOnResource(resources?=?"classpath:website.properties")
          Properties?addWebsiteProperties(){
          ????????//...
          }
          @ConditionalOnWebApplication與@ConditionalOnNotWebApplication
          這兩個(gè)注解用于判斷當(dāng)前的應(yīng)用程序是否是Web應(yīng)用程序。如果當(dāng)前應(yīng)用是Web應(yīng)用程序,則使用Spring WebApplicationContext,并定義其會話的生命周期。下面是一個(gè)簡單的示例:
          @ConditionalOnWebApplication
          HealthCheckController?healthCheckController(){
          ????????//...
          }
          @ConditionalExpression
          此注解可以讓我們控制更細(xì)粒度的基于表達(dá)式的配置條件限制。當(dāng)表達(dá)式滿足某個(gè)條件或者表達(dá)式為真的時(shí)候,將會執(zhí)行被此注解標(biāo)注的方法。
          @Bean
          @ConditionalException("${localstore}?&&?${local?==?'true'}")
          LocalFileStore?store(){
          ????????//...
          }
          @Conditional
          @Conditional注解可以控制更為復(fù)雜的配置條件。在Spring內(nèi)置的條件控制注解不滿足應(yīng)用需求的時(shí)候,可以使用此注解定義自定義的控制條件,以達(dá)到自定義的要求。下面是使用該注解的簡單示例:
          @Conditioanl(CustomConditioanl.class)
          CustomProperties?addCustomProperties()
          {
          ????????//...
          }

          總結(jié)

          本次課程總結(jié)了Spring Boot中常見的各類型注解的使用方式,讓大家能夠統(tǒng)一的對Spring Boot常用注解有一個(gè)全面的了解。
          由于篇幅的原因,關(guān)于Spring Boot不常用的一些注解,將在下一次分享中進(jìn)行補(bǔ)充和說明。

          最近熱文閱讀:

          1、BigDecimal使用不當(dāng),造成P0事故!
          2、改造BeanUtils,優(yōu)雅實(shí)現(xiàn)List數(shù)據(jù)拷貝
          3、讓人上癮的新一代開發(fā)神器,徹底告別Controller、Service、Dao等方法
          4、SpringBoot 啟動時(shí)自動執(zhí)行代碼的幾種方式,還有誰不會??
          5、延時(shí)消息常見實(shí)現(xiàn)方案
          6、勁爆!Java 通用泛型要來了。。
          7、如何寫出讓同事吐血的代碼?
          8、遭棄用的 Docker Desktop 放大招!宣布支持 Linux
          9、IDEA公司再發(fā)新神器!超越 VS Code 騷操作!
          10、推薦好用 Spring Boot 內(nèi)置工具類
          關(guān)注公眾號,你想要的Java都在這里

          瀏覽 49
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美午夜理伦三级在线观看 | 天堂网在线亚洲 | 国产美女被强躁到呻吟红视频 | 久久99人妻精品 | 日日日av |