<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:57525|
      • 收錄網站:224856|

      IT精英團

      跳羚最常用的七種注解 哪些你還不知道?

      跳羚最常用的七種注解 哪些你還不知道?

      瀏覽次數:
      評論次數:
      編輯: 樂詠
      信息來源: ITPUB
      更新日期: 2022-07-18 21:06:01
      摘要

      隨著技術的更新迭代,Java5.0開始支持注解。而作為java中的領軍框架spring,自從更新了2.5版本之后也開始慢慢舍棄xml配置,更多使用注解來控制spring框架。而spring的的注解那么

      • 正文開始
      • 相關閱讀
      • 推薦作品

      隨著技術的更新迭代,Java5.0開始支持注釋。作為java中的主導框架,spring從2.5版本更新開始,逐漸拋棄了xml配置,使用注釋來控制spring框架。但是spring的評論太多,可能很多年都不會作為java使用。這里根據類型總結了七種最常用的注釋。

      一. 核心注解

      @Required

      這個注釋用在bean的setter方法上。指示此屬性是必需的,必須在配置階段注入,否則將引發BeanInitializationExcepion。

      @Autowired

      該注釋用于bean的字段、setter方法和構造函數,以顯式聲明依賴關系。根據類型自動布線。

      當這個注釋用在字段上并且值由屬性傳遞時,Spring會自動將值賦給這個字段。您還可以將此注釋用于私有屬性(不推薦),如下所示。

      @組件

      公共類用戶{

      @自動連線

      私有地址地址;

      }

      最常見的用法是在setter上使用這個注釋,這樣就可以將自定義代碼添加到setter方法中。如下所示:

      @組件

      公共類用戶{

      私有地址地址;

      @自動連線

      public set Address(Address Address){

      //自定義代碼

      this.address=地址;

      }

      }

      當在構造函數上使用這個注釋時,應該注意一個類中只有一個構造函數可以使用這個注釋。另外,在Spring4.3之后,如果一個類只有一個構造函數,那么即使不使用這個注釋,Spring也會自動注入相關的bean。如下所示:

      @組件

      公共類用戶{

      私有地址地址;

      公共用戶(地址地址){

      this.address=地址;

      }

      }

      beanclass='xx。用戶'/

      @Qualifier

      此注釋與@Autowired一起使用。使用這個注釋可以讓您對注射過程有更多的控制。

      @Qualifier可以用在單個構造函數或方法的參數上。當上下文中有幾個相同類型的bean時,不能使用@Autowired來區分要綁定的bean。在這種情況下,您可以使用@Qualifier來指定名稱。

      @組件

      公共類用戶{

      @自動連線

      @限定符(' address1 ')

      私有地址地址;

    1. ...

    2. }

    3. @Configuration
      此注解用在class上來定義bean。其作用和xml配置文件相同,表示此bean是一個Spring配置。此外,此類可以使用@Bean注解來初始化定義bean。

      1. @Configuartion

      2. public class SpringCoreConfig{

      3. @Bean

      4. public AdminUser adminUser() {

      5.        AdminUser adminUser = new AdminUser();

      6. return adminUser;

      7. }

      8. }

      @ComponentScan
      此注解一般和@Configuration注解一起使用,指定Spring掃描注解的package。如果沒有指定包,那么默認會掃描此配置類所在的package。

      @Lazy
      此注解使用在Spring的組件類上。默認的,Spring中Bean的依賴一開始就被創建和配置。如果想要延遲初始化一個bean,那么可以在此類上使用Lazy注解,表示此bean只有在第一次被使用的時候才會被創建和初始化。此注解也可以使用在被@Configuration注解的類上,表示其中所有被@Bean注解的方法都會延遲初始化。

      @Value
      此注解使用在字段、構造器參數和方法參數上。@Value可以指定屬性取值的表達式,支持通過#{}使用SpringEL來取值,也支持使用${}來將屬性來源中(Properties文件、本地環境變量、系統屬性等)的值注入到bean的屬性中。此注解值的注入發生在AutowiredAnnotationBeanPostProcessor類中。

      二. Spring MVC和REST注解

      @Controller
      此注解使用在class上聲明此類是一個Spring controller,是@Component注解的一種具體形式。

      @RequestMapping
      此注解可以用在class和method上,用來映射web請求到某一個handler類或者handler方法上。當此注解用在Class上時,就創造了一個基礎url,其所有的方法上的@RequestMapping都是在此url之上的。

      可以使用其method屬性來限制請求匹配的http method。

      1. @Controller

      2. @RequestMapping("/users")

      3. public class UserController{

      4. @RequestMapping(method = RequestMethod.GET)

      5. public String getUserList() {

      6. return"users";

      7. }

      8. }

      此外,Spring4.3之后引入了一系列@RequestMapping的變種。如下:

      • @GetMapping

      • @PostMapping

      • @PutMapping

      • @PatchMapping

      • @DeleteMapping

      分別對應了相應method的RequestMapping配置。

      @CookieValue
      此注解用在@RequestMapping聲明的方法的參數上,可以把HTTP cookie中相應名稱的cookie綁定上去。

      1. @ReuestMapping("/cookieValue")

      2. public void getCookieValue(@CookieValue("JSESSIONID") String cookie){


      3. }

      cookie即http請求中name為JSESSIONID的cookie值。

      @CrossOrigin
      此注解用在class和method上用來支持跨域請求,是Spring 4.2后引入的。

      1. @CrossOrigin(maxAge = 3600)

      2. @RestController

      3. @RequestMapping("/users")

      4. public class AccountController{

      5. @CrossOrigin(origins = "http://xx.com")

      6. @RequestMapping("/login")

      7. public Result userLogin() {

      8. // ...

      9. }

      10. }

      @ExceptionHandler
      此注解使用在方法級別,聲明對Exception的處理邏輯??梢灾付繕薊xception。

      @InitBinder
      此注解使用在方法上,聲明對WebDataBinder的初始化(綁定請求參數到JavaBean上的DataBinder)。在controller上使用此注解可以自定義請求參數的綁定。

      @MatrixVariable
      此注解使用在請求handler方法的參數上,Spring可以注入matrix url中相關的值。這里的矩陣變量可以出現在url中的任何地方,變量之間用;分隔。如下:

      1. // GET /pets/42;q=11;r=22

      2. @RequestMapping(value = "/pets/{petId}")

      3. public void findPet(@PathVariableString petId, @MatrixVariableint q) {

      4. // petId == 42

      5. // q == 11

      6. }

      需要注意的是默認Spring mvc是不支持矩陣變量的,需要開啟。

      1. <mvc:annotation-drivenenable-matrix-variables="true"/>

      注解配置則需要如下開啟:

      1. @Configuration

      2. publicclassWebConfigextendsWebMvcConfigurerAdapter{


      3. @Override

      4. publicvoid configurePathMatch(PathMatchConfigurer configurer) {

      5.        UrlPathHelper urlPathHelper = newUrlPathHelper();

      6. urlPathHelper.setRemoveSemicolonContent(false);

      7. configurer.setUrlPathHelper(urlPathHelper);

      8. }

      9. }

      @PathVariable
      此注解使用在請求handler方法的參數上。@RequestMapping可以定義動態路徑,如:

      1. @RequestMapping("/users/{uid}")

      可以使用@PathVariable將路徑中的參數綁定到請求方法參數上。

      1. @RequestMapping("/users/{uid}")

      2. public String execute(@PathVariable("uid") String uid){

      3. }

      @RequestAttribute

      此注解用在請求handler方法的參數上,用于將web請求中的屬性(request attributes,是服務器放入的屬性值)綁定到方法參數上。

      @RequestBody
      此注解用在請求handler方法的參數上,用于將http請求的Body映射綁定到此參數上。HttpMessageConverter負責將對象轉換為http請求。

      @RequestHeader
      此注解用在請求handler方法的參數上,用于將http請求頭部的值綁定到參數上。

      @RequestParam
      此注解用在請求handler方法的參數上,用于將http請求參數的值綁定到參數上。

      @RequestPart
      此注解用在請求handler方法的參數上,用于將文件之類的multipart綁定到參數上。

      @ResponseBody
      此注解用在請求handler方法上。和@RequestBody作用類似,用于將方法的返回對象直接輸出到http響應中。

      @ResponseStatus
      此注解用于方法和exception類上,聲明此方法或者異常類返回的http狀態碼??梢栽贑ontroller上使用此注解,這樣所有的@RequestMapping都會繼承。

      @ControllerAdvice
      此注解用于class上。前面說過可以對每一個controller聲明一個ExceptionMethod。這里可以使用@ControllerAdvice來聲明一個類來統一對所有@RequestMapping方法來做@ExceptionHandler、@InitBinder以及@ModelAttribute處理。

      @RestController
      此注解用于class上,聲明此controller返回的不是一個視圖而是一個領域對象。其同時引入了@Controller和@ResponseBody兩個注解。

      @RestControllerAdvice
      此注解用于class上,同時引入了@ControllerAdvice和@ResponseBody兩個注解。

      @SessionAttribute
      此注解用于方法的參數上,用于將session中的屬性綁定到參數。

      @SessionAttributes
      此注解用于type級別,用于將JavaBean對象存儲到session中。一般和@ModelAttribute注解一起使用。如下:

      1. @ModelAttribute("user")


      2. publicPUser getUser() {}


      3. // controller和上面的代碼在同一controller中

      4. @Controller

      5. @SeesionAttributes(value = "user", types = {

      6. User.class

      7. })


      8. public class UserController{}

      三. Spring Boot注解

      @EnableAutoConfiguration
      此注解通常被用在主應用class上,告訴Spring Boot自動基于當前包添加Bean、對bean的屬性進行設置等。

      @SpringBootApplication
      此注解用在Spring Boot項目的應用主類上(此類需要在base package中)。使用了此注解的類首先會讓Spring Boot啟動對base package以及其sub-pacakage下的類進行component scan。

      此注解同時添加了以下幾個注解:

      • @Configuration

      • @EnableAutoConfiguration

      • @ComponentScan

      四. Stereotype注解

      @Component
      此注解使用在class上來聲明一個Spring組件(Bean), 將其加入到應用上下文中。

      @Controller
      前文已經提到過,另外,公眾 號Java精選,回復java面試,獲取spring面試資料,支持在線隨時隨地刷題。

      @Service
      此注解使用在class上,聲明此類是一個服務類,執行業務邏輯、計算、調用內部api等。是@Component注解的一種具體形式。

      @Repository
      此類使用在class上聲明此類用于訪問數據庫,一般作為DAO的角色。

      此注解有自動翻譯的特性,例如:當此種component拋出了一個異常,那么會有一個handler來處理此異常,無需使用try-catch塊。

      五. 數據訪問注解

      @Transactional
      此注解使用在接口定義、接口中的方法、類定義或者類中的public方法上。需要注意的是此注解并不激活事務行為,它僅僅是一個元數據,會被一些運行時基礎設施來消費。

      六. 任務執行、調度注解

      @Scheduled
      此注解使用在方法上,聲明此方法被定時調度。使用了此注解的方法返回類型需要是Void,并且不能接受任何參數。

      1. @Scheduled(fixedDelay=1000)

      2. public void schedule() {


      3. }


      4. @Scheduled(fixedRate=1000)

      5. public void schedulg() {


      6. }

      第二個與第一個不同之處在于其不會等待上一次的任務執行結束。

      @Async
      此注解使用在方法上,聲明此方法會在一個單獨的線程中執行。不同于Scheduled注解,此注解可以接受參數。

      使用此注解的方法的返回類型可以是Void也可是返回值。但是返回值的類型必須是一個Future。

      七. 測試注解

      @ContextConfiguration
      此注解使用在Class上,聲明測試使用的配置文件,此外,也可以指定加載上下文的類。

      此注解一般需要搭配SpringJUnit4ClassRunner使用。

      1. @RunWith(SpringJUnit4ClassRunner.class)

      2. @ContextConfiguration(classes = SpringCoreConfig.class)

      3. public class UserServiceTest{


      4. }

      標簽:注解 方法 參數
      建立碼頭工人形象的N個技巧 運維工程師看了一下就學會了~
      ? 上一篇 2022-07-18
      • 建立碼頭工人形象的N個技巧 運維工程師看了一下就學會了~
        0閱讀 0條評論 個贊
        構建鏡像的幾個小技巧構建上下文執行dockerbuild命令時,當前的工作目錄被稱為構建上下文。默認情況下,Dockerfile就位于該路徑下。也可以通過-f參數來指定dockerfil……
      • 基于MySQL的SQL語句最完整的解釋
        0閱讀 0條評論 個贊
        本文目錄:一、SQL語句二、SQL約束三、SQL語句(DQL)四、多表操作五、多表關系實戰六、多表查詢一、SQL語句1.SQL概述SQL語句介紹數據庫是不認識JAVA語言的,……
      • Linux技巧二:tmux常用命令和快捷鍵/查詢網絡端口
        0閱讀 0條評論 個贊
        tmux常用命令及快捷鍵tmux(terminalmultiplexer)是Linux上的終端復用神器,可從一個屏幕上管理多個終端。使用該工具,用戶可以連接或斷開會話,而保持終端在后臺運行。與sc……
      • 99%的Java程序員都會踩的6個坑
        0閱讀 0條評論 個贊
        前言作為Java程序員的你,不知道有沒有踩過一些基礎知識的坑。有時候,某個bug,你查了半天,最后發現竟然是一個非常低級的錯誤。有時候,某些代碼,這一批數據功能正常,但換了一批數據就出現異常了。有時候……
      • Linux網絡基礎和性能優化
        0閱讀 0條評論 個贊
        網絡模型:常見的有OSI網絡模型、TCP/IP網絡模型、五層協議網絡模型:OSI七層網絡模型:將傳統的五層TCP模型中的應用層分為應用層、表示層、會話層應用層:負責為應用程序提供統一的接口……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • 記住一個在線RPC超時故障排除和后續的GC調優想法
        1閱讀 0條評論 個贊
        本文記錄了一次線上RPC服務調用超時問題的排查流程,排查過程中涉及到JVM優化的過程與思路,包括JVMGC原理以及問題排查思路,分享出來希望對大家有所幫助。本文概要RPC服務異常和排查過程排……
      • Linux——如何使用evilscan掃描網絡
        0閱讀 0條評論 個贊
        Evilscan是一個網絡掃描器,它運行在NodeJS環境中。有許多種選項,允許用戶掃描單個IP地址或一個范圍的IP。它還允許用戶選擇掃描單個端口或一組端口。環境Centos8npm(N……
      • 在線K8s群集性能評估 基本服務部署調整
        1閱讀 0條評論 個贊
        對于非結構化的數據存儲系統來說,LIST操作通常都是非常重量級的,不僅占用大量的磁盤IO、網絡帶寬和CPU,而且會影響同時間段的其他請求(尤其是響應延遲要求極高的選主請求),是集群穩定性的一……
      • Kubernetes資源的拓撲感知調度優化
        0閱讀 0條評論 個贊
        1.背景1.1.問題源起近年來,隨著騰訊內部自研上云項目的不斷發展,越來越多的業務開始使用云原生方式托管自己的工作負載,容器平臺的規模因此不斷增大。以Kubernetes為底座的云原生技術極大……
      • 微服務和消息隊列的建筑師圖冊
        0閱讀 0條評論 個贊
        概述“架構師圖譜”是一個很宏大的命題,特別是優秀的架構師自身也是“由點到面再到圖”,一點點成長積累起來,嘗試寫這篇文章的目的更多的是結合自身的一些架構、研發、管理經驗對現階段做一個復盤總結,所以這里更……
      • 關于Linux之父你不知道的6件事
        0閱讀 0條評論 個贊
        如果讓你現在說出三個程序員的名字,Linus很可能就在其中。作為世界上最著名的電腦程序員、黑客之一,LinusBenedictTorvalds寫出了Linux內核1.0版,發起了開源運……
      • 圖文并茂!你對Kubernetes的深入分析
        0閱讀 0條評論 個贊
        來源公眾號:騰訊云開發者/原文鏈接導語|在云原生技術發展的浪潮之中,Kubernetes作為容器編排領域的事實標準和云原生領域的關鍵項目,其誕生與完善有著對應的技術歷史背景,了解這個過程,對于系統……
      • 數據治理組織:不易建立 但太難轉向?
        0閱讀 0條評論 個贊
        公司在2022年工作會議上提出了“5141”數智驅動的商業智能總體框架(如下圖所示),要求圍繞頂層設計、組織保障、流程運營、IT支撐、數據安全治理、數據消費六個方面構建企業級數據治理體系,確保數據從產……
      • 13個非常有用的Python代碼片段 推薦收藏!
        0閱讀 0條評論 個贊
        以下文章來源于公眾號-蘿卜大雜燴,作者周蘿卜今天我們主要來介紹應用程序當中的通用Python代碼片段,一起進步吧ListsSnippets我們先從最常用的數據結構列表開始№1:將兩個列表合并成……
      • 數據倉庫和數據治理思維導圖 xmind(全部)
        0閱讀 0條評論 個贊
        (本文轉自BAT大數據架構)一數倉star二數倉建設2.1架構選型2.2開發大體流程2.3開發詳細流程及規范2.3.1清洗規范2.3.2數據同步規范2.3.3數倉分層規范2.3.4詞根……
      • C語言高級提示 弱符號和弱引號
        0閱讀 0條評論 個贊
        __attribute__是一個編譯器指令,其實是GNUC的一種機制,本質是一個編譯器的指令,在聲明的時候可以提供一些屬性,在編譯階段起作用,來做多樣化的錯誤檢查和高級優化。用于在C,C++……
      • 鑒定SpringBoot項目的四種方法
        2閱讀 0條評論 個贊
        文章介紹了spring-boot中實現通用auth的四種方式,包括傳統AOP、攔截器、參數解析器和過濾器,并提供了對應的實例代碼,最后簡單總結了下他們的執行順序。前言最近一直被無盡的業務需求淹沒,沒……
      • 在Kotlin開發者眼中 Java缺少哪些特性?
        5閱讀 0條評論 個贊
        出品|OSC開源社區(ID:oschina2013)NicolasFr?nkel是一名資深程序員,擁有近二十年的Java開發經歷。他在幾年前開始學習Kotlin,在此之后,每當他再使用……
      • MySQL中間件ProxySQL的事務測試
        0閱讀 0條評論 個贊
        MySQL中間件ProxySQL的事務測試--2022-06-29春雷1、前言為了驗證ProxySQL的幾個autocommit參數對:setautocomm……
      • 大廠中的技術專家:建筑設計中的常見思維模式
        0閱讀 0條評論 個贊
        上周我寫的一篇文章《關于技術能力的思考和總結》引起了大家的關注,好多讀者的評論“以寫代想、以想促真、以講驗真”,大家的感受很深刻,基于上次的文章,這篇文章我其實更想跟大家聊聊一些常用的思考方法,思考問……
      • C語言為什么不檢查數組下標?
        0閱讀 0條評論 個贊
        引言最近在查一個bug,查到最后發現是數組越界導致的。數組只有30個字節,代碼卻向這個數組填充了35個數據,這個bug還是偶現的,查到它確實廢了一番功夫。我就突然想到:C語言為什么不檢查數組下標呢??……
      • 跳羚最常用的七種注解 哪些你還不知道?
        0閱讀 0條評論 個贊
        隨著技術的更新迭代,Java5.0開始支持注解。而作為java中的領軍框架spring,自從更新了2.5版本之后也開始慢慢舍棄xml配置,更多使用注解來控制spring框架。而spring的的注解那么……
      • 99%的Java程序員都會踩的6個坑
        0閱讀 0條評論 個贊
        前言作為Java程序員的你,不知道有沒有踩過一些基礎知識的坑。有時候,某個bug,你查了半天,最后發現竟然是一個非常低級的錯誤。有時候,某些代碼,這一批數據功能正常,但換了一批數據就出現異常了。有時候……
      • C語言預處理命令的分類和工作原理
        0閱讀 0條評論 個贊
        編排|strongerHuang微信公眾號|嵌入式專欄C語言編程過程中,經常會用到如#include、#define等指令,這些標識開頭的指令被稱為預處理指令,預處理指令由預處理程序(預處理器……
      • Linux之父發言:Rust即將出現在Linux內核中
        1閱讀 0條評論 個贊
        上個月,LinusTorvalds在Linux基金會開源峰會上發言稱,Rust有可能很快就會出現在Linux的內核中,最快是下一個內核周期。LinusTorvalds和DirkH……
      最近發布資訊
      更多
      警花高潮嗷嗷叫
      <del id="nnjnj"></del><track id="nnjnj"></track>

      <p id="nnjnj"></p>

      <address id="nnjnj"></address>

        <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

          <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>