精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品jizz在线观看麻豆| 无码人妻精品一区二区三区9厂 | 国语一区二区三区| 久久免费电影网| 国产精品视频导航| 亚洲xxxx3d动漫| 国内不卡的一区二区三区中文字幕| 国产精品无圣光一区二区| 国产一区红桃视频| 国产一级淫片免费| 国产精品欧美三级在线观看| 欧美日韩精品一区二区天天拍小说| 在线观看一区欧美| 性xxxxbbbb| 新狼窝色av性久久久久久| 亚洲毛茸茸少妇高潮呻吟| 色乱码一区二区三区在线| 黄色的视频在线观看| 91蜜桃网址入口| 91精品国产综合久久久久久丝袜 | 中文字幕一区二区三区在线视频 | 国产高清在线观看| 国产乱色国产精品免费视频| 久久久之久亚州精品露出| 小毛片在线观看| 亚洲十八**毛片| 国产精品美女久久久久av爽李琼| 999国内精品视频在线| 无码人妻一区二区三区线| 亚洲综合色站| 亚洲欧美制服中文字幕| 性活交片大全免费看| 国模私拍国内精品国内av| 狠狠色狠色综合曰曰| 欧美日韩亚洲综合一区二区三区激情在线| 国产又粗又大又爽| 国产一区二区三区成人欧美日韩在线观看| 久热爱精品视频线路一| 久久精品女同亚洲女同13| 国产一区二区三区免费观看在线| 亚洲综合在线第一页| 日本在线免费观看一区| 成人毛片在线精品国产| 久久精品999| 国产精品扒开腿做| 在线观看国产亚洲| 影音先锋中文字幕一区| 久久视频国产精品免费视频在线 | 国产成人麻豆精品午夜在线| 欧美aaa在线| 97色在线视频| 日韩精品视频播放| 亚洲日本黄色| 孩xxxx性bbbb欧美| 欧美日韩在线国产| 在线精品国产| 久久综合色影院| 精品人妻伦九区久久aaa片| 日韩欧美大片| 日韩中文视频免费在线观看| 国产精品理论在线| 久久精品国产68国产精品亚洲| 亚洲香蕉av在线一区二区三区| 日本人dh亚洲人ⅹxx| 婷婷综合国产| 欧美精品aⅴ在线视频| 手机视频在线观看| 日韩伦理一区二区| 欧美性一区二区| 手机在线国产视频| 秋霞影院一区| 亚洲国产精品成人va在线观看| 亚州av综合色区无码一区| 久久久亚洲欧洲日产| 日韩国产欧美精品一区二区三区| 中文字幕精品久久久| 日韩a级大片| 亚洲天堂男人的天堂| 91视频免费在观看| 香港欧美日韩三级黄色一级电影网站| 欧美成人精品一区二区| 精品爆乳一区二区三区无码av| 欧美日一区二区在线观看 | 欧美日韩国产综合在线| 成人午夜电影在线观看| 亚洲欧洲日韩av| 欧美 日韩 国产 在线观看| 国产精品一区二区三区视频网站| 亚洲一区二区美女| 黄色片久久久久| 欧美黑粗硬大| 欧美不卡激情三级在线观看| 亚洲av成人片无码| 精品一区不卡| 欧美精品日韩三级| 久久国产视频一区| 精品系列免费在线观看| 国产在线精品一区二区三区》| 手机福利小视频在线播放| 国产精品无码永久免费888| 久久久天堂国产精品| 黄色软件视频在线观看| 日韩欧美在线中文字幕| 色婷婷一区二区三区在线观看| 欧美色图婷婷| 久热在线中文字幕色999舞| 久久久久免费看| 性色一区二区三区| 91|九色|视频| 大地资源中文在线观看免费版| 亚洲日穴在线视频| 国产主播在线看| 午夜久久av| 精品久久一区二区| 亚洲色图100p| 性色一区二区三区| 国产精品二区二区三区| av资源网在线观看| 亚洲激情网站免费观看| 免费成人在线视频网站| 蜜桃在线一区| 最近日韩中文字幕中文| 国产无遮挡呻吟娇喘视频| 国产一区二区导航在线播放| 日韩精品av一区二区三区| sis001亚洲原创区| 欧美老女人第四色| 女性生殖扒开酷刑vk| 午夜av一区| 5566成人精品视频免费| 精品国产av鲁一鲁一区| 91麻豆精东视频| 97在线国产视频| 亚洲1区在线观看| 色偷偷888欧美精品久久久| 国产手机在线视频| 国产九色精品成人porny| 午夜久久资源| 97se综合| 亚洲电影免费观看高清完整版在线| 永久免费av无码网站性色av| 国产精品外国| 成人av资源网| 91精品久久久久久久久久久| 国产成人一级片| 国产成人av网站| 伊人久久大香线蕉精品| 韩国精品视频在线观看 | 一区二区在线电影| 日韩欧美中文视频| 欧美日韩性在线观看| 日本成熟性欧美| 亚洲欧美高清视频| 亚洲美女屁股眼交| 色婷婷综合在线观看| 97国产成人高清在线观看| 国产精品视频白浆免费视频| 99re热久久这里只有精品34| 欧美四级电影在线观看| 欧美成人久久久免费播放| 日韩高清一区二区| 欧美久久在线| 黄色激情在线播放| 亚洲欧美一区二区三区久久 | 亚洲av无码一区二区三区观看| 激情欧美一区二区三区| 国产精品美女诱惑| 久久国产精品黑丝| 亚洲激情自拍图| 欧美激情亚洲综合| 国产精品午夜在线观看| 欧美一级小视频| 亚洲私人影院| 欧美日韩在线高清| 成人影院大全| 日韩在线播放视频| 精品女同一区二区三区| 亚洲色图欧洲色图婷婷| 国产精品久久久久久在线观看| а√天堂在线官网| 亚洲乱码在线| 国产拍精品一二三| a视频在线观看| 91精品国产一区二区| 国产精品日日夜夜| 久久综合狠狠综合久久激情| 亚洲色图 在线视频| 欧美777四色影| 精品999在线观看| 成人黄页网站视频| 欧美日韩国产va另类| 国产黄色片免费| 欧美日韩美女在线| 久久国产柳州莫菁门| 极品少妇一区二区三区精品视频| 97干在线视频| 精品久久久久中文字幕小说| 国产精品亚洲综合天堂夜夜| 伊人手机在线| 亚洲天堂av在线免费| 99热这里只有精品5| 欧美日韩中文字幕| 男女做暖暖视频| 91小视频免费看| 樱花草www在线| 噜噜噜躁狠狠躁狠狠精品视频| 这里只有精品66| 日韩高清电影免费| 91精品综合视频| 欧美极度另类| 中文字幕av一区二区| 色婷婷激情五月| 7777精品伊人久久久大香线蕉最新版| 日本欧美黄网站| 国产精品美女一区| 欧美日韩亚洲一区二区| 国产又粗又硬又长又爽| 成人av免费在线| 久久人妻精品白浆国产| 欧美淫片网站| 日本午夜精品电影| 亚洲成人黄色| 国产日韩精品视频| 亚洲三级欧美| 久久久免费电影| av免费在线观看网站| 亚洲最大在线视频| 亚洲av成人无码久久精品老人| 欧美日韩国产bt| 国语对白永久免费| 亚洲国产美女搞黄色| 永久久久久久久| 欧美—级在线免费片| 免费成人蒂法网站| 国产一区二区三区av电影| 97av视频在线观看| 国产精品毛片一区二区三区| 99精品一区二区三区的区别| 激情五月综合网| 茄子视频成人在线观看| 色婷婷av一区二区三区丝袜美腿| 成人免费在线网址| 蜜臀国产一区| 奇米成人av国产一区二区三区| 黄色免费在线网站| 久久精品国产欧美亚洲人人爽 | 亚洲香蕉av在线一区二区三区| 五月婷婷免费视频| 亚洲国产三级网| 黄色av网站免费在线观看| 日韩视频免费观看高清完整版| 国产精品久久久午夜夜伦鲁鲁| 精品视频1区2区3区| 懂色av蜜臀av粉嫩av分享吧最新章节| 欧美午夜www高清视频| 日本午夜视频在线观看| 污片在线观看一区二区| 欧美成人精品一区二区免费看片| 99精品欧美一区二区蜜桃免费 | 成人性生活视频免费看| 欧美精品色网| 成人午夜精品久久久久久久蜜臀| 91久久国产| 国产成人一二三区| 欧美国产免费| 99精品视频网站| 激情综合网址| 国产一区二区在线视频播放| 午夜在线视频观看日韩17c| 午夜精品久久久内射近拍高清| 麻豆精品网站| 日韩爱爱小视频| 韩国成人精品a∨在线观看| 欧美色图校园春色| 不卡的电视剧免费网站有什么| 午夜男人的天堂| 久久久久免费观看| 国产极品视频在线观看| 综合网在线视频| 欧美日韩偷拍视频| 午夜精品久久一牛影视| 国产极品在线播放| 午夜精品一区二区三区免费视频| 男人天堂视频在线| 欧美精品久久99| 好吊视频一二三区| 亚洲天堂精品在线| av文字幕在线观看| 午夜精品在线视频| 四虎4545www精品视频| 成人黄色av播放免费| 精品福利一区| 亚洲精品二区| 欧美一区二区三区免费看| 免费看日本毛片| 日韩国产欧美在线观看| 国产不卡的av| 久久久久久久久久久久久女国产乱 | av在线私库| 国产91精品黑色丝袜高跟鞋| 久久精品 人人爱| 国产精品免费看一区二区三区| 欧洲激情视频| 久久成人福利视频| 蜜桃av一区二区在线观看| 亚洲成人av免费观看| 久久精品网站免费观看| 青青草免费av| 欧美性大战久久| 97精品久久人人爽人人爽| 亚洲激情成人网| 黄视频在线播放| 久久久久国产精品免费| 日本成人在线网站| 麻豆91av| 黑丝一区二区| 久国产精品视频| 久久综合久久鬼色中文字| 欧美黑人一级片| 色婷婷久久99综合精品jk白丝| 国产成人精品一区二三区四区五区| 亚洲人午夜精品| 国产精品论坛| 97久久天天综合色天天综合色hd| 日韩精品诱惑一区?区三区| 波多野结衣之无限发射| 久久免费黄色| 欧美一级片在线免费观看| 久久人人超碰精品| 日本网站免费观看| 日韩精品影音先锋| 日本暖暖在线视频| 国产成人精品国内自产拍免费看| 国产精品欧美大片| 日韩一级免费看| 国产精品1区2区| 精品一区在线观看视频| 欧美日韩国产首页| 欧美熟妇乱码在线一区| 欧美成人精品xxx| 精品视频一区二区三区在线观看| 一本一生久久a久久精品综合蜜 | 国产精品萝li| av大全在线观看| 国产视频丨精品|在线观看| 青青草原av在线| 99国产超薄肉色丝袜交足的后果| 五月天久久久| 蜜桃福利午夜精品一区| 国产精品不卡一区二区三区| 在线视频你懂得| xxxx性欧美| 成人黄色毛片| 亚洲精品影院| 久久精品72免费观看| 91 在线视频| 91麻豆精品国产91久久久资源速度| 99青草视频在线播放视| 国产精品成人久久久久| 精品国产一区二区三区| 鲁一鲁一鲁一鲁一av| 日本一区二区三区在线不卡| aaa在线视频| 欧美一区二区黄色| 日本在线免费播放| 国产精品一区二区久久久| 成人在线免费观看视频| 黄色永久免费网站| 亚洲人成网站色在线观看| 性网爆门事件集合av| 97国产成人精品视频| 精品中文一区| 日韩一级理论片| 综合分类小说区另类春色亚洲小说欧美| 国产精品一级视频| 欧美日本黄视频| 日韩深夜福利| 国产淫片免费看| 欧美韩国日本不卡| 99久久亚洲精品日本无码| 欧美精品激情视频| 香蕉久久精品| 国产成人在线综合| 一区二区三区久久久| 性欧美一区二区三区| 欧美www在线| 欧美激情影院| 看欧美ab黄色大片视频免费| 国产精品久久久久影院| 国产ts变态重口人妖hd| 2019最新中文字幕| 欧美gay男男猛男无套| 黑森林av导航| 色婷婷综合久色| 快射视频在线观看| 久久精品日产第一区二区三区精品版| 七七婷婷婷婷精品国产| 久久久综合久久久| 国产亚洲精品一区二区| 久久久精品区|