Java注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释的代码本身的一部分。注解对于代码的运行效果没有直接影响。网络上对注解的解释过于严肃、刻板,这并不是我喜欢的风格。尽管这样的解释听起来非常的专业。为了缓解大家对"注解"的陌生感,我来说点有意思的。其实我对"注解"这个词的第一印象并不是Java的注解,而是朱熹的名作《四书章句集注》。为什么我会有这么大的脑洞呢?因为当我试着去翻译Annotation这个单词的时候,得到的结果是"注释"而不是"注解"。《四书章句集注》正是朱熹对《大学》、《中庸》、《论语》、《孟子》四书做出的重要的注释。要知道,该书可是明清以后科举考试的题库和标准答案!注解(Annotation)是在 Java SE 5.0 版本中开始引入的概念,同class和interface一样,也属于一种类型。很多开发人员认为注解的地位不高,但其实不是这样的。像@Transactional、@Service、@RestController、@RequestMapping、@CrossOrigin等等这些注解的使用频率越来越高。01、为什么要使用注解呢?为什么要使用注解呢?让我们从另外一个问题说起。"跨域"这两个字就像一块狗皮膏药黏在每一个前端开发者的身上;我也不例外,虽然我并不是一个纯粹的前端开发者。跨域问题的出现,源于浏览器的同源策略——限制一个源加载的脚本去访问另外一个源的资源,可有效地隔离潜在的恶意文件,是一种重要的安全机制。
跨域问题的解决方案也有很多,比如说:1)JSONP2)Nginx代理3)"跨域资源共享"(Cross-origin resource sharing),简称CORS,可以说是处理跨域问题的标准做法。记得第一次遇到跨域问题的时候,我特意向一个同学请教了解决方案,他告诉我的答案如下。第一步,在web.
第二步,实现WebContextFilter类。
看到这样的解决方案,我真的是蛮崩溃的。不就一个跨域问题嘛,用得着这么多代码吗?我对这样的解决方案非常的不满意。于是下定决心要好好的研究一番,大概花了半天的时间吧,我终于搞清楚了"跨域"问题,以及它的标准解决方案CORS。并且找到了一个极为简洁的解决方案——@CrossOrigin,只要在Controller类上加上这个注解,就可以轻松地解决跨域问题。代码如下。
如果没有找到@CrossOrigin这个注解,我真的就要按照同学提供的方案去解决跨域的问题了。但那样做就好像,我们卖掉家里的小汽车,然后出行的时候驾一辆马车一样。这也正是我想告诉你的,为什么要使用注解的原因:它让我们的代码看起来更简洁,更有时代的进步感。02、该如何定义注解呢?注解需要通过@interface关键字(形式和接口非常的相似,只是前面多了一个@)进行定义。我们可以打开@CrossOrigin的源码来看一下。
从上面的代码可以看得出来,"注解"真的很"注解",除了注释多和"元注解"多之外,真没有别的了。"元注解"?什么是"元注解"呢?"元注解"是用来注解(动词)注解(名词)的注解(名词)。请感受汉语的博大精深。@Target、@Retention和@Documented就是所谓的元注解。1)@TargetTarget是目标的意思,@Target指定了注解运用的场景。都有哪些场景值呢?- ElementType.ANNOTATION_TYPE:可以给注解进行注解
- ElementType.CONSTRUCTOR:可以给构造方法进行注解
- ElementType.FIELD:可以给字段进行注解
- ElementType.LOCAL_VARIABLE:可以给局部变量进行注解
- ElementType.METHOD:可以给方法进行注解
- ElementType.PACKAGE:可以给包进行注解
- ElementType.PARAMETER:可以给方法内的参数进行注解
- ElementType.TYPE:可以给类型进行注解,比如类、接口和枚举
- RetentionPolicy.SOURCE:注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
- RetentionPolicy.CLASS:注解只被保留到编译进行的时候,并不会被加载到 JVM 中。
- RetentionPolicy.RUNTIME:注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们。
04、注解经常用在哪里呢?1)@Transactional:Spring 为事务管理提供的功能支持。2)@ Service:Spring在进行包扫描的时候,会自动将这个类注册到Spring容器中。3)@RestController:是@ResponseBody和@Controller的组合注解。也就是说,下面这段代码与下下面的代码等同。
4)@RequestMapping :Spring Web 应用程序中最常用到的注解之一,将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上。5)@Select:MyBatis提供的查询语句注解。示例如下:
6)还有很多很多,就不再一一列举了。05)最后我想说的是,注解有许多用处,主要有:- 提供信息给编译器: 编译器可以利用注解来探测错误和警告信息。
- 编译阶段时的处理: 软件工具可以利用注解信息来生成代码、HTML文档。
- 运行时的处理: 某些注解可以在程序运行的时候接受代码的提取。
原文转载:http://www.shaoqun.com/a/490411.html
naning9韩国官网:https://www.ikjzd.com/w/2401
myshow:https://www.ikjzd.com/w/2235
乐宝:https://www.ikjzd.com/w/2200
在Java中,并不是所有的类型信息都能在编译阶段明确,有一些类型信息需要在运行时才能确定,这种机制被称为RTTI,英文全称为Run-TimeTypeIdentification,即运行时类型识别,有没有一点"知行合一"的味道?运行时类型识别主要由Class类实现。Java注解是一系列元数据,它提供数据用来解释程序代码,但是注解并非是所解释的代码本身的一部分。注解对于代码的运行效果没有直接影响。网络
亿恩网:亿恩网
mymall:mymall
菲律宾宿雾购物美食 - :菲律宾宿雾购物美食 -
马尔代夫在哪?:马尔代夫在哪?
拉萨布达拉宫内有什么历史文物?:拉萨布达拉宫内有什么历史文物?
No comments:
Post a Comment