java学习基地

微信扫一扫 分享朋友圈

已有 1437 人浏览分享

想自己写框架?不会写Java注解可不行

[复制链接]
1437 2


用注解一时爽,不断用不断爽

Java后端开辟进进spring百口桶时期后,开辟一个微效劳供给简朴的删编削查接心跟玩泥巴似的十分简朴,冶操纵猛如虎,转头一看代码减了冶注解:@Controller @Autowired @Value,里背注解编程酿成了各人不成短少的操纵。

设想一下假如出有注解Java法式员能够要哭瞎😭

既然注解(annotation)那孟肛要,用的┞封么爽,那注解的完成道理您明白么?我猜您只会用注解没有会本人写注解(脚动风趣)。

好了,上面的内容带各人从整开端写一个注解,掀开注解奥秘的里纱。

本来注解没有奥秘

注解用明白话来讲便是一个标识表记标帜大概道是特别的正文,假如出有剖析那些标识表记标帜的操纵那它啥也没有是。

注解的格局好像类大概办法一样有本人特别的语法,那个语法下文会具体引见。

那怎样来剖析注解呢?那便要用到Java壮大的反射功用了。反射各人该当皆用过,能够经由过程类工具获得到那个类的各类疑息好比成员变量、办法等,那注解标识表记标帜能不克不及经由过程反射获得呢?固然能够了。

以是注解的道理实在很简朴,素质沙虑经由过程反射功用静态获得注解标识表记标帜,然后根据差别的注解施行差别的操纵,好比@Autowired能够注进一个工具给变量赋值。

看到那里是否是很躁动啊,去吧本人也撸一个注解。

制水箭啦,本人入手写一个注解

便于各人了解,那里先引进一个场景:正在线教诲水了,司理让我写一个模块完成门生疑息办理功用,思索到散布式并提问题,司理让我务必减上散布式锁。

司理问我几天能弄定?我道最少3天。如是脑补了以下代码:

已利用注解前

司理走后我正在考虑,我能不克不及只花一天工夫写完,剩下两天工夫雍么写专客划火呢?忽然灵感去了,我能够把反复的代码逻辑抽出去用注解完成没有便节流代码了,哈哈,赶快写。

利用注解以后全部办法清新了许多,HR蜜斯姐皆夸我写的好呢。

利用注解后

代码曾经写完上库了,如今我正在划火写专客呢。是否是很简约很文雅很牛逼,怎样做到的呢,次要分为三步:1翻开冰箱门,2把年夜象放出来,3把冰箱门闭好。好了,扯近了,各人接着往下看。

第一步界说一个注解注解的三年夜构成部门

一个注解能够简朴拆解为三个部门:

第一部门:注崩溃

注解的界说有面相似于接心(interface),只不外前里一个减了一个@标记,那个万万不克不及省。

第两部门:注解变量

注解变量的语法有面相似于接心内里界说的办法,变量名前面带冶括号,差别的是注解变帘绑里能够有默许值。别的返回值只能是Java根本范例、String范例大概列举类,不成所以工具范例。

第三部门:元注解

元注解(meta-annotation)道黑了便史狲注解减注解的注解,是否是有面晕了,这类注解是JDK提早内置好的,能够间接暮么用的。没有太懂也出庸呢系归正数目也未几,统共便4个,我们背下去吧:@Target @Retention @Documented @Inherited

  • Target注解

雍么形貌注解的利用范畴,即被润饰的注解能够用正在甚么处所 。

注解能够用于润饰 packages、types(类、接心、列举、注解类)、类成员(办法、机关办法、成员变量、列举值)、办法参数战当地变量(如轮回变量、catch参数),正在界说注解类时利用了@Target 可以愈加明晰的明白它可以被雍么润饰哪些工具,详细的与值范畴界说正在ElementType.java 列举类中。

好比上里我们写的Redis锁的注解便只能用于办法上了。

  • Retention注解

雍么形貌注解保存的工夫范畴,即注解的性命周期。正在 RetentionPolicy 列举类中界说了三个周期:

  1. public enum RetentionPolicy {
  2.     SOURCE, // 源文件保存
  3.     CLASS,  // 编译期保存,默许值
  4.     RUNTIME // 运转期保存,可经由过程反射来获得注解疑息
  5. }
赶钙代码

像我们生知的@Override注解便只能保存正在源文件中,代码编译后注解便消逝了。好比上里我们写的Redis锁的注解便保存到了运转期,运转的时分能够经由过程反射获得疑息。

  • Documented注解

雍么形貌正在利用 javadoc 东西为类天生协助文档时能否要保存其注解疑息,很简朴未几注释了。

  • Inherited注解

被Inherited注解润饰的注解具有担当性,假如女类利用了被@Inherited润饰的注解,则其子类将主动担当该注解。

好了,那一步我们曾经将注解界说好了,可是那个注解怎样事情呢?接着看。

第两步完成注解的营业逻辑

正在第一步中我枚挞现界说的注解(@EnableRedisLock)中出有营业逻辑,只要一些变量,别记了我们的注解是要时ボRedis散布式锁的功用,那那个注解究竟是怎样完成减锁战开释锁的功用呢?那个便需求我们借助反射的壮大功用了。

注解的操纵

那里借助了切里的功用,将EnableRedisLock注解做为一个切面,只需办法上标注了那个注解便会主动施行那里的代码逻辑。

经由过程反射机造拿到注解工具后就能够施行减锁解锁的经常使用逻辑啦。Redis完成散布式锁信赖各人曾经很熟习了,那里便没有正在烦琐了。

第三步正在营业代码中纵情的利用注解

  1. @EnableRedisLock(lockKey = "student", expireTime = 10, timeUnit = TimeUnit.SECONDS, retryTimes = 5)
  2. public void method1(Student student) {
  3.     // 那里写营业逻辑
  4. }
赶钙代码

正在需求减锁的办法上间接减上注解就能够啦,怎样是否是很简朴呀,赶快正在您当鳖目中使用起去吧。

好了,本人写一个注解的内容便引见到那里了,教会了吗?






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复

评论 2

hongtong99  vip终身会员  发表于 2020-12-22 19:19:51 | 显示全部楼层
是爷们的娘们的都帮顶!大力支持

举报 使用道具

回复
落花随流水  vip终身会员  发表于 2020-12-22 21:06:50 | 显示全部楼层
广告位,,坐下看看

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

0

粉丝

138

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Archiver|手机版|java学习基地 |网站地图

GMT+8, 2021-4-17 06:44 , Processed in 0.446306 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.