当前位置:首页 > Java知识 > 正文内容

框架开发之java注解的妙用是什么意思(java注解用途)

abcsky887个月前 (10-30)Java知识99

今天给各位分享

作者:locality来源:https://www.jianshu.com/p/b560b30726d4如果你还不会使用注解,你肯定不好意思对别人说你学过Spring,你学过Mybatis,因为它们用了大量的注解。

框架开发之java注解的妙用是什么意思(java注解用途)

可见注解在开发领域已经使用的非常广泛了注解的好处:1.能够读懂别人写的代码,特别是框架相关的代码2.本来可能需要很多配置文件,需要很多逻辑才能实现的内容,就可以使用一个或者多个注解来替代,这样就使得编程更加简洁,代码更加清晰。

3.(重点)刮目相看(但是怎么样才能让别人刮目相看呢?会用注解不是目的,最重要的是要使用自定义注解来解决问题)举个栗子:如果面试的时候,你跟老板说网络引流平台你会使用注解,老板觉得你这个人还行;但是如果老板发现你会自定义注解解决问题,老板肯定就会眼前一亮。

注解这一概念是在java1.5版本提出的,说Java提供了一种原程序中的元素关联任何信息和任何元数据的途径的方法。一、Java中的常见注解1)JDK注解JDK注解一共分为三类:

案例:我们先新建一个接口people,如下:publicinterfacepeople {public String name();publicintage();publicvoidwork();}然后再建一个类Child实现类people这个接口,并实现该类的方法:

publicclassChildimplementspeo网络引流平台ple{@Overridepublic String name(){returnnull;   }@Overridepublicintage()

{return0;   }@Overridepublicvoidwork(){   }看到这里,我们发现这里的所有方法都会加上一个@Override标记,它告诉我们,同时也告诉编译器我们的这些方法肯定覆盖了类people里面的方法的。

假如说,我现在把类people里面的某一个方法注释掉://public String name();再看类Child里面的name方法就会报错这样,以后大家看到@Override的时候就能想到这个方法是覆盖了某个接口的方法网络引流平台的。

然后,我们回过头来看类people里面有一个work的方法这里我们可以理解为人是要工作的,但是并不是所有的人都在工作,那么怎么办呢?如果说这个接口正在用,我们不能删除这个方法,这个时候我们就可以这样:@Deprecated

publicvoidwork();@Deprecated标记就表明这个方法已经过时了,在实际中,它又有什么样的应用场景呢?我们在建一个测试类:publicclassTest {publicvoidwork

(){       people people=new Child();!      people.work();   }}这个时候我们会发现myeclipse会给一个警网络引流平台告,并且在work中间出现一个破折号,意思就是这个方法已经过时了。

那么问题来了,虽然这个方法过时了,但是我们就是那么傲娇,一定要用它,怎么办呢?只需要这样:publicclassTest{@SuppressWarnings("deprecation")publicvoid

work(){       people people=new Child();       people.work();   }}这样我们就忽略了这个警告@SuppressWarnings("deprecation")就表示我们忽略了deprecation这样的一个警告。

2)Java第三方注解

二、注解的分类1)按照运行机制划网络引流平台分:【源码注解→编译时注解→运行时注解】源码注解:只在源码中存在,编译成.class文件就不存在了编译时注解:在源码和.class文件中都存在像前面的@Override、@Deprecated、@SuppressWarnings,他们都属于编译时注解。

运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解像@Autowired自动注入的这样一种注解就属于运行时注解,它会在程序运行的时候把你的成员变量自动的注入进来2)按照来源划分:【来自JDK的注解——来自第三方的注解——自定义注解】。

3)元注解:元注解是给注解进行注解,可以理解为注解的注解就是元注解三、自定义注解我们分四步来解析自定义注解:网络引流平台自定义注解的语法要求:@Target({ElementType.METHOD,ElementType.TYPE})。

@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Description {Stringdesc();String

author();intage() default18;}首先我们要明确这不是一个接口,它是使用@interface关键字定义的一个注解然后我们看下面的几个方法,String desc();虽然它很类似于接口里面的方法,其实它在注解里面只是一个成员变量(成员以无参无异常的网络引流平台方式声明),。

int age() default 18;(成员变量可以用default指定一个默认值的)最后我们要知道:①.成员类型是受限制的,合法的类型包括基本的数据类型以及String,Class,Annotation,Enumeration等。

②.如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)③.注解类可以没有成员,没有成员的注解称为标识注解元注解:有没有发现上面那段代码有一个没有说呢?没错,它们就是我们所说的元注解:。

@Target({ElementType.METHOD,ElementType.TYPE})@Retention(Reten网络引流平台tionPolicy.RUNTIME)@Inherited@Documented

我们先看第一行:@Target是这个注解的作用域,ElementType.METHOD是这个注解的作用域的列表,METHOD是方法声明,除此之外,还有:CONSTRUCTOR(构造方法声明),FIELD(字段声明),LOCAL VARIABLE(局部变量声明),METHOD(方法声明),PACKAGE(包声明),PARAMETER(参数声明),TYPE(类接口)

第二行:@Retention是它的生命周期,前面不是说注解按照运行机制有一个分类嘛,RUNTIME就是在运行时存在,可以通过反射读取除此之外,还有:SOUR网络引流平台CE(只在源码显示,编译时丢弃),CLASS(编译时记录到class中,运行时忽略),RUNTIME(运行时存在,可以通过反射读取)。

第三行:@Inherited是一个标识性的元注解,它允许子注解继承它第四行:@Documented,生成javadoc时会包含注解使用自定义注解:使用注解的语法:@(=,=,...)。

案例:@Description(desc="i am Color",author="boy",age=18)publicString Color() {return"red";   }这里的Description是我们刚才在

自定义注解语法要求里面定义的注解噢,然后我们可以给它的每一网络引流平台个成员变量赋值,注意数据类型值得注意的是,因为我们前面定义的作用域是在方法和类接口上,所以这个注解在Color()方法上使用是没问题的解析注解概念:

通过反射获取类 、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑。准备工作:

Description类.png

Child类.png接下来,我们就开始测试了:publicclassParseAnn {publicstaticvoidmain(String[] args) {try {// 使用类加载器加载类           Class c = Class.forName(

"com.test.Child");// 找到类上面的注解   网络引流平台        boolean isExist = c.isAnnotationPresent(Description.class);// 上面的这个方法是用这个类来判断这个类是否存在Description这样的一个注解

if (isExist) {// 拿到注解实例,解析类上面的注解               Description d = (Description) c.getAnnotation(Description.class);

System.out.println(d.value());           }       } catch (ClassNotFoundExcepti网络引流平台on e) {           e.printStackTrace();

       }   }}输出的结果:i am classannotation可以看到,我们成功的解析了Child类上面的注解接下来,我们继续解析方法上的注解://获取所有的方法           Method[] ms = c.getMethods();。

// 遍历所有的方法for (Method m : ms) {               boolean isExist1 = m.isAnnotationPresent(Description.class);

if (isExist1) {                  网络引流平台 Description d1=m.getAnnotation(Description.class);                   System.

out.println(d1.value());               }           }输出的结果:i am class annotationi am method annotation

可以看到,我们成功的解析了方法上面的注解//另一种解析方法for (Method m : ms) {//拿到方法上的所有的注解               Annotation[] as=m.getAnnotations();。

for (Ann网络引流平台otation a : as) {//用二元操作符判断a是否是Description的实例if (a instanceof Description) {                       Description d=(Description) a;

                       System.out.println(d.value());                   }               }           }

也可以得到上面的效果此时,如果把Description类里面的元注解改一下,比如:@Retention(RetentionPolicy.RUNTIME)→@Retention(Reten网络引流平台tionPolicy.SOURCE),再运行程序,结果会成怎样呢?如果改成CLASS呢?大家要不要试一试?。

【END】关注下方二维码,订阅更多精彩内容

扫描二维码推送至手机访问。

版权声明:本文由海南拓宏网络科技工作室发布,如需转载请注明出处。

本文链接:http://www.4blc.com/post/794.html

分享给朋友:

“框架开发之java注解的妙用是什么意思(java注解用途)” 的相关文章

阿里巴巴秋招是不是结束了呢(阿里巴巴秋招是不是结束了呀)

本文分享给大家的是: 马上过34岁生日了,和大家聊聊最近的情况半年前还在迷茫该学什么,怎样才能走出现在的困境,半年后已经成功上岸阿里,感谢在这期间帮助我的每一个人面试中总结了200道经典的Java面试题,里面包含面试要回答的知识重点,并且我根据知识类型进行了分类,可以说非常全面了~...

java软件工程师培训班(java软件师培训学校)

本文分享给大家的是: 原标题:北京有哪些java培训中心可以去学习呢小伙伴想要参加java培训机构来学习开发技术知识,选择一线城市的培训机构还是比较好的,比如北京,毕竟一线城市的发展速度快,开发技术更新的也快,这样小伙伴能够学习到更为新颖全面的java开发技术知识。 现在北...

5个降号降哪个调(5个脚趾名称)

今天给各位分享 优化 JVM 吞吐量和避免运行时瓶颈的最佳方法是将 Java 性能分析作为团队持续开发和部署 (CI/CD) 策略的关键部分以下是五个 Java 性能分析技巧和最佳实践,可帮助你充分利用本地硬件和云托管运行时环境。 1. 永远不要关闭Java性能分析Java...

计算机专业为什么赚钱(为什么计算机毕业的工资那么高)

本文分享给大家的是: 不知不觉,我已经写了 4 期编程杂感了每一期编程杂感,我都会把近期的思考和碰到的一些有意思的东西分享出来请不要对大龄程序员有偏见!—「编程杂感」第1期同事自研了一款操作系统—「编程杂感」第 2 期编程之路无捷径!「编程杂感」第 3 期 为什么有人劝别...

非计算机专业能进去it行业吗(不是计算机专业能进大厂吗)

今天给各位分享 线上直播课丨线下定制班丨就业直通车 随着IT行业越来越红火,很多同学都有这样的困惑:我不是学计算机专业的,可以进入IT行业吗?其实很多的IT大佬之前也不是计算机专业,后期转行的不在少数现如今在大学学什么专业,对从事的工作真的没有太大关系,有80%的学生都是跨...

计算机java能做什么工作内容(计算机专业有java课程吗)

本篇文章给大家谈谈 程序员作为薪资最高的职业之一,一直是很多人选择职业的热门首选Java程序员又在所有程序员中占比最大, 因此,不少人说,Java程序员的薪资一定程度上能够反映出整体行业的薪资水准很多计算机专业科班出身学生,经常会问安妹同一个问题:我在大学就是学的是计算机专业,毕业...