精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聽說你只會用注解,不會自己寫注解?那有點危險了

開發 后端
本文來嘮一嘮關于注解的相關操作,并自己動手來寫一個注解感受一下原理。原理性的東西掌握了,心里自然就不慌了。

Java猿的命根子!

自Java EE框架步入Spring Boot時代之后,注解簡直是Java程序員的命根子啊,面向注解編程成了日常操作!

換句話的意思就是說:如果沒有注解,我們啥也干不了哇(滑稽)。

這豈不是很危險!

所以本文來嘮一嘮關于注解的相關操作,并自己動手來寫一個注解感受一下原理。原理性的東西掌握了,心里自然就不慌了。

注解的基本原理

首先必須要說的是,注解它也不是什么高深的玩意兒,沒必要畏懼它!

意如其名,其本來的意思就是用來做標注用:可以在類、字段變量、方法、接口等位置進行一個特殊的標記,為后續做一些諸如:代碼生成、數據校驗、資源整合等工作做鋪墊。

對嘛,就做標記用的嘛!

注解一旦對代碼標注完成,后續我們就可以結合Java強大的反射機制,在運行時動態地獲取到注解的標注信息,從而可以執行很多其他邏輯,完成我們想要的自動化工作。

所以,反射必須要學好!

來!動手造一個注解

在我的前文《聽說你還在手寫復雜的參數校驗?》里曾經講過, Spring自身提供了非常多好用的注解可以用來方便地幫我們做數據校驗的工作。

比如,在沒有注解加持時,我們想要校驗 Student類:   

  1. public class Student {  
  2.         private Long id;        // 學號  
  3.         private String name;    // 姓名  
  4.         private String mobile;  // 手機號碼(11位)  
  5.     } 

我們只能通過手寫 if判斷來進行校驗:

  1. @PostMapping("/add")  
  2.  public String addStudent( @RequestBody Student student ) {  
  3.      if( student == null )  
  4.          return "傳入的Student對象為null,請傳值";  
  5.      if( student.getName()==null || "".equals(student.getName()) )  
  6.          return "傳入的學生姓名為空,請傳值";  
  7.      if( student.getScore()==null )  
  8.          return "傳入的學生成績為null,請傳值";  
  9.      if( (student.getScore()<0) || (student.getScore()>100) )  
  10.          return "傳入的學生成績有誤,分數應該在0~100之間";  
  11.      if( student.getMobile()==null || "".equals(student.getMobile()) )  
  12.          return "傳入的學生電話號碼為空,請傳值";  
  13.      if( student.getMobile().length()!=11 )  
  14.          return "傳入的學生電話號碼長度有誤,應為11位";  
  15.      studentService.addStudent( student ); // 將student對象存入MySQL數據庫 
  16.      return "SUCCESS";  
  17.  } 

這樣非常繁瑣!

但是借助于 Spring提供的注解,數據校驗工作可以變得非常優雅,就像這樣:   

  1. public class Student {  
  2.        @NotNull(message = "傳入的姓名為null,請傳值" 
  3.        @NotEmpty(message = "傳入的姓名為空字符串,請傳值" 
  4.        private String name;    // 姓名  
  5.        @NotNull(message = "傳入的分數為null,請傳值" 
  6.        @Min(value = 0,message = "傳入的學生成績有誤,分數應該在0~100之間" 
  7.        @Max(value = 100,message = "傳入的學生成績有誤,分數應該在0~100之間" 
  8.        private Integer score;  // 分數  
  9.        @NotNull(message = "傳入的電話為null,請傳值" 
  10.        @NotEmpty(message = "傳入的電話為空字符串,請傳值" 
  11.        @Length(min = 11max = 11message = "傳入的電話號碼長度有誤,必須為11位" 
  12.        private String mobile;  // 電話號碼  
  13.    } 

于是很多人就表示疑問,這些注解到底如何實現功能的呢?

今天本文則以上文的 @Length注解為例,自己動手實現一遍,這個學會了,其他注解實現原理也是類似。

總共分三大步實現。

第一步:首先定義注解:@Length

  1. @Target({ElementType.FIELD})  
  2.   @Retention(RetentionPolicy.RUNTIME)  
  3.   public @interface Length {  
  4.       int min();          // 允許字符串長度的最小值  
  5.       int max();          // 允許字符串長度的最大值  
  6.       String errorMsg();  // 自定義的錯誤提示信息  
  7.   } 

下面做幾點說明:

1、注解的定義有點像定義接口 interface,但唯一不同的是前面需要加一個 @符號

2、注解的成員變量只能使用基本類型、 String或者 enum枚舉,比如 int可以,但 Integer這種包裝類型就不行,需注意

3、像上面 @Target、 @Retention這種加在注解定義上面的注解,我們稱為 “元注解”,元注解就是專門用于給注解添加注解的注解,哈哈,很拗口,簡單理解,元注解就是天生就有的注解,可直接用于注解的定義上

4、 @Target(xxx) 用來說明該自定義注解可以用在什么位置,比如:

  •  ElementType.FIELD:說明自定義的注解可以用于類的變量
  •  ElementType.METHOD:說明自定義的注解可以用于類的方法
  •  ElementType.TYPE:說明自定義的注解可以用于類本身、接口或 enum類型
  •  等等... 還有很多,如果記不住,建議現用現查

5、 @Retention(xxx) 用來說明你自定義注解的生命周期,比如:

  •  @Retention(RetentionPolicy.RUNTIME):表示注解可以一直保留到運行時,因此可以通過反射獲取注解信息
  •  @Retention(RetentionPolicy.CLASS):表示注解被編譯器編譯進 class文件,但運行時會忽略
  •  @Retention(RetentionPolicy.SOURCE):表示注解僅在源文件中有效,編譯時就會被忽略

所以聲明周期從長到短分別為:RUNTIME > CLASS > SOURCE ,一般來說,如果需要在運行時去動態獲取注解的信息,還是得用RUNTIME,就像本文所用。

第二步:獲取注解并對其進行驗證

在運行時想獲取注解所代包含的信息,該怎么辦?那當然得用 Java的反射相關知識!

下面寫了一個驗證函數 validate(),代碼中會逐行用注釋去解釋想要達到的目的,認真看一下每一行的注釋: 

  1. public static String validate( Object object ) throws IllegalAccessException {  
  2.       // 首先通過反射獲取object對象的類有哪些字段  
  3.      // 對本文來說就可以獲取到Student類的id、name、mobile三個字段  
  4.      Field[] fields = object.getClass().getDeclaredFields();  
  5.      // for循環逐個字段校驗,看哪個字段上標了注解  
  6.      for( Field field : fields ) {  
  7.          // if判斷:檢查該字段上有沒有標注了@Length注解  
  8.          if( field.isAnnotationPresent(Length.class) ) {  
  9.              // 通過反射獲取到該字段上標注的@Length注解的詳細信息  
  10.              Length length = field.getAnnotation( Length.class );  
  11.              field.setAccessible( true ); // 讓我們在反射時能訪問到私有變量  
  12.              // 用過反射獲取字段的實際值  
  13.              int value =( (String)field.get(object) ).length();  
  14.              // 將字段的實際值和注解上做標示的值進行比對  
  15.              if( value<length.min() || value>length.max() ) {  
  16.                  return length.errorMsg();  
  17.              }  
  18.          }  
  19.      }  
  20.      return null;  
  21.  } 

可見,學好Java的反射知識是多么的重要!

第三步:使用注解

這一步比較輕松,使用注解的過程往往都是很愉悅的   

  1. public class Student {  
  2.        private Long id;        // 學號  
  3.        private String name;    // 姓名  
  4.        @Length(min = 11max = 11errorMsg = "電話號碼的長度必須為11位" 
  5.        private String mobile;  // 手機號碼(11位)  
  6.    } 

怎么樣,其實一點也不復雜吧,主要就是反射相關的知識! 

 

責任編輯:龐桂玉 來源: java版web項目
相關推薦

2022-11-11 08:31:39

Java注解注解類

2020-09-27 06:50:56

Java互聯網注解

2022-04-28 21:53:52

TypeScriptany類型

2022-11-07 17:50:36

2024-03-07 08:32:35

注解InitBinderHTML

2021-03-16 15:12:57

CompletableFuture機制java

2024-07-10 11:40:15

2024-08-12 12:25:25

SpringMVC開發

2025-10-13 02:00:00

2021-11-30 10:38:09

splitStringTokenJava

2012-02-09 10:42:24

Java

2024-11-14 11:39:10

Order注解接口

2020-10-30 07:09:52

Lombok架構師

2020-05-14 08:59:28

API網關性能

2020-09-01 14:17:03

WindowsDefender微軟

2021-03-17 11:16:58

while(1)for(;;)語言

2021-01-28 09:55:50

while(1)for(;;)Linux

2020-07-30 07:27:54

MinIOFastDFSCeph

2014-07-28 16:13:19

Gitlinux開源

2020-12-18 09:45:33

DockerLinux命令
點贊
收藏

51CTO技術棧公眾號

日本少妇一区二区三区| 一二三四中文字幕| 波多野结衣视频在线看| 欧美电影三区| 日韩女优制服丝袜电影| 玩弄中年熟妇正在播放| 岛国最新视频免费在线观看| 九九热在线视频观看这里只有精品| 两个人的视频www国产精品| 美女扒开腿免费视频| 小黄鸭精品aⅴ导航网站入口| 中文字幕乱码日本亚洲一区二区| 99在线视频首页| 成年人视频免费| 欧美极品一区二区三区| 亚洲天天在线日亚洲洲精| 日韩精品aaa| 视频二区不卡| 亚洲国产精品一区二区www在线| 日本欧美色综合网站免费| 国内精品久久久久久久久久| 久久性天堂网| 久久久亚洲国产| 黑人と日本人の交わりビデオ| 国产厕拍一区| 91精品国产免费| 色一情一乱一伦一区二区三区日本 | 98在线视频| 不卡在线视频中文字幕| 91久久精品一区| 91视频久久久| 亚洲久久一区| 欧美国产视频日韩| 中文字幕观看av| 中文字幕精品影院| 亚洲激情国产精品| 69久久精品无码一区二区| 91av一区| 在线视频国内一区二区| 日韩免费毛片视频| av美女在线观看| 亚洲制服丝袜av| japanese在线视频| 91高清在线| 国产欧美日韩精品一区| 蜜桃视频在线观看91| 男人天堂手机在线观看| 国产福利一区二区三区在线视频| 国产免费成人av| 日本中文字幕久久| 国产欧美91| 97超级碰在线看视频免费在线看| 精品无码一区二区三区电影桃花| 欧美激情亚洲| 色综合久久久888| 久草成人在线视频| 伊人久久婷婷| 午夜精品蜜臀一区二区三区免费 | 懂色aⅴ精品一区二区三区蜜月| 欧美中文字幕在线观看视频| 性爱视频在线播放| 亚洲第一激情av| 3d动漫一区二区三区| 亚洲永久av| 欧美视频一区二区三区| 午夜免费看毛片| 国产精品白丝久久av网站| 欧美一级在线免费| 国产国语老龄妇女a片| 东京久久高清| 国产视频一区在线| 日本一区二区视频在线播放| 日韩欧美三级| 久久中文字幕视频| 久久久久久久久久久网| 国产日韩欧美| 国产精品爱啪在线线免费观看| 中文字幕+乱码+中文| 国产一区二区三区四| 91精品国产一区二区三区动漫| 亚洲国产精品一| 91小视频免费观看| 亚洲三区在线| 国产福利在线免费观看| 欧美性xxxxxx| 一区二区在线免费看| 天堂av一区| 亚洲精品视频在线观看视频| a资源在线观看| 欧美一区二区三区久久精品| 91精品国产99| 中文字幕精品一区二| 国产一区二区导航在线播放| 国产在线精品二区| 在线激情网站| 亚洲成av人影院| 中日韩av在线播放| 女同另类激情重口| 精品国模在线视频| 在线观看免费国产视频| 看电视剧不卡顿的网站| 国产亚洲福利社区| 欧美成人性生活视频| 午夜精品久久久久久不卡8050| 熟妇人妻无乱码中文字幕真矢织江| 日韩免费精品| 在线日韩中文字幕| 国产亚洲第一页| 秋霞国产午夜精品免费视频| 国产精品日韩一区二区免费视频| eeuss影院www在线播放| 性久久久久久久久| 亚洲精品在线视频播放| 伊人精品一区| 久久久久久久久爱| 国产精品伊人久久| 国产视频一区在线播放| 免费视频爱爱太爽了| 日韩成人综合网| 亚洲人成电影网站色| 精品无码久久久久久久| 国产综合色视频| 台湾成人av| 周于希免费高清在线观看| 日韩欧美一区电影| 亚洲 欧美 国产 另类| 久久青草久久| 久久久影院一区二区三区| 日韩影视在线| 91精品免费观看| 日本精品久久久久中文| 噜噜噜在线观看免费视频日韩| 91超碰rencao97精品| 欧美一区二区三区| 欧美视频一区二区三区在线观看 | 一卡二卡三卡在线| 日本一区二区三级电影在线观看 | 永久久久久久久| 蜜桃一区二区三区四区| 欧洲精品亚洲精品| 欧美日韩免费看片| 亚洲欧美日韩国产中文| 国产成人在线免费视频| a级高清视频欧美日韩| 国产av熟女一区二区三区| 午夜视频一区二区在线观看| 久久国产精品久久久久久| 国产精品无码久久av| 国产精品久久久久久久久动漫 | 精品一区二区成人免费视频 | 欧美亚洲丝袜传媒另类| 国产 欧美 在线| 天堂在线亚洲视频| 日韩成人av电影在线| 欧美日韩在线精品一区二区三区激情综合 | 国产精品999.| 一区二区三区四区电影| 亚洲自拍小视频| 日本电影在线观看| 精品国产凹凸成av人网站| 久久久久久久久99| a在线欧美一区| 国产亚洲精品网站| 色棕色天天综合网| 国产精品视频大全| а√天堂在线官网| 欧美成人精品高清在线播放| 国产午夜视频在线| www国产精品av| 中文字幕第80页| 99久久激情| 国产99在线免费| 伊人网在线播放| 一区二区三区日韩在线| 国产又粗又猛又爽又黄的视频一| 亚洲人成网站精品片在线观看| 亚洲精品无码久久久久久久| 在线成人国产| 日韩免费电影一区二区| 91精品一区| 久久久久久亚洲精品| 天堂a√在线| 一本色道久久综合亚洲91| 精品在线观看一区| av网站免费线看精品| 国产天堂在线播放| 欧美成人69av| 欧美日韩精品免费在线观看视频| 欧美视频第一| 国内精品免费午夜毛片| av网站在线免费观看| 欧美tickling网站挠脚心| 波多野结衣一区二区三区在线| 亚洲免费三区一区二区| 熟女丰满老熟女熟妇| 美国毛片一区二区| 欧美精品自拍视频| 欧美大人香蕉在线| 欧美精品一区二区三区四区五区| 9999精品免费视频| 日韩美女中文字幕| 久久亚洲资源| 日韩视频在线免费观看| 欧美高清成人| 精品少妇一区二区三区| 最新在线中文字幕| 精品久久久久久久久中文字幕 | 蜜桃视频在线观看www| 欧洲视频一区二区| 在线观看免费国产视频| 亚洲免费av在线| 日韩丰满少妇无码内射| 成人在线视频一区| 亚洲第一天堂久久| 久久综合网络一区二区| 成年人午夜免费视频| 亚洲欧美网站在线观看| 四虎永久国产精品| 久久99精品久久久久久园产越南| 国产精品麻豆免费版| 亚洲精品无播放器在线播放| 日韩免费观看av| а√在线天堂官网| 欧美成人自拍视频| 精品国产99久久久久久| 国产一区二区三区在线观看视频 | 国产情侣第一页| 国产韩国精品一区二区三区| 日本成人三级| 伊人春色精品| 久久精品日产第一区二区三区精品版 | 欧美日韩久久| 在线观看成人免费| 亚洲91视频| 亚洲综合激情五月| 91视频一区| 亚洲国产午夜伦理片大全在线观看网站| 日韩精品亚洲aⅴ在线影院| 国产精品一区二区三区免费观看| 欧一区二区三区| 91在线免费看片| 久久九九精品视频| 亚洲自拍中文字幕| 国产一区二区视频在线看| 成人xxxx视频| crdy在线观看欧美| 成人福利视频在线观看| 久久爱.com| 成人黄色影片在线| 精品一区91| 97久草视频| 亚洲精品影片| 国产精品久久久久久久久久久久冷| av一级亚洲| 国内一区二区三区在线视频| 免费福利视频一区| 欧美日韩中文国产一区发布| 亚洲人成亚洲精品| 午夜精品亚洲一区二区三区嫩草 | 99久久er热在这里只有精品15| 无码人妻精品一区二区三| 91在线视频在线| 精品人妻互换一区二区三区 | avove在线播放| 亚洲综合一区二区| 日本三级网站在线观看| 欧美午夜片欧美片在线观看| 亚洲婷婷综合网| 欧美日韩激情一区二区三区| 国产精品久久久久久无人区| 欧美一区二区精品| 天天综合网天天综合| 亚洲视频欧洲视频| 成人免费网址| 97精品国产97久久久久久春色| av有声小说一区二区三区| 国产在线日韩在线| jizz久久精品永久免费| 欧美日韩在线高清| 亚洲男女av一区二区| 青青青青草视频| 美腿丝袜亚洲三区| 日本wwwxx| 久久久久国产一区二区三区四区| 人成免费在线视频| 一区二区三区日韩欧美精品| 亚洲精品男人的天堂| 欧美日韩国产一区| 天堂网av在线播放| 精品久久久av| 天堂电影一区| 成人免费福利在线| 私拍精品福利视频在线一区| 一区二区在线不卡| 亚洲美女少妇无套啪啪呻吟| 一级黄色特级片| thepron国产精品| 99自拍视频在线| 色老综合老女人久久久| 99国产揄拍国产精品| 亚洲欧美www| 丰满大乳少妇在线观看网站| 国产精品免费一区二区三区都可以| 91精品国产自产在线丝袜啪| 色视频一区二区三区| 日韩香蕉视频| 红桃视频一区二区三区免费| 国产欧美一区二区精品性色 | 狠狠色丁香久久综合频道| 黄色一级大片在线观看| 国产电影精品久久禁18| 91导航在线观看| 日韩欧美999| 亚洲精品97久久中文字幕| 自拍偷拍亚洲区| 亚洲天堂资源| 国产一区免费观看| 亚洲精品午夜av福利久久蜜桃| 黑鬼大战白妞高潮喷白浆| 成人美女视频在线观看18| 五月综合色婷婷| 欧美日韩综合色| 黑人与亚洲人色ⅹvideos| 久久久亚洲影院你懂的| 国产成人免费av一区二区午夜 | 国产主播精品在线| 精品国产91| 国产xxxxx在线观看| 成人午夜免费电影| 日日骚一区二区三区| 91精品免费在线观看| 日本成a人片在线观看| 国产成人精品一区二区三区| 麻豆视频一区| 男人日女人视频网站| 成人av手机在线观看| 久久免费少妇高潮99精品| 日韩一区二区精品在线观看| 欧美a免费在线| 国产综合久久久久久| 欧美激情另类| 日韩av一卡二卡三卡| 日韩美女啊v在线免费观看| 在线视频你懂得| 色久欧美在线视频观看| 人人精品久久| 特级西西444| 成人性生交大片免费看中文网站| 国产亚洲欧美久久久久| 精品欧美黑人一区二区三区| 美足av综合网| 国产精品一区在线观看| 亚洲人成免费| 久久精品老司机| 在线观看日韩高清av| 国产黄色在线| 国产精品在线看| 一级欧洲+日本+国产 | 国产婷婷色一区二区三区四区| 中文字幕在线日本| 色哟哟网站入口亚洲精品| 伊人久久大香线蕉综合影院首页| 手机看片日韩国产| 国产丶欧美丶日本不卡视频| 日韩xxxxxxxxx| 亚洲欧美日韩精品久久亚洲区 | 亚洲一级一区| 在线免费观看成年人视频| 欧美亚州韩日在线看免费版国语版| 在线a人片免费观看视频| 亚洲自拍偷拍一区| 亚洲精品激情| 日韩丰满少妇无码内射| 91.成人天堂一区| 蜜乳av一区| 涩涩涩999| 国产福利91精品一区| 在线观看黄网站| 中文字幕不卡av| 午夜日韩影院| 亚洲国产精品毛片av不卡在线| 国产精品久久久久一区| 精品人妻一区二区三区四区不卡| 性欧美激情精品| 欧美精品一区二区三区中文字幕| 女人高潮一级片| 欧美日韩国产色| 四虎久久免费| 国产一区国产精品| 蜜桃av一区二区在线观看| 国产第100页| 中文一区二区视频| theporn国产在线精品| 男操女免费网站| 亚洲国产一区视频| eeuss影院www在线播放| 国产久一道中文一区| 久久电影网站中文字幕| 日本一级淫片免费放| 日韩三级影视基地|