Annotations
一、介绍
注解,可以将注解看成一种特殊的接口。是一种特殊种类的元数据,它能够关联Java语言中不同元素和结构。有意思的是,在Java生态系统中大多数使用样板XML描述符的地方,注解在消除这些XML描述符上做出了很大的贡献。注解引入了新的,类型安全以及非常强健的配置和个性化技术。
二、分析
1、注解作为特殊接口
就像我们在前文中所提到的一样,注解用来关联Java语言中的元数据和不同的元素。
注解本身对它所注解的元素不会造成任何直接的影响。但是,依靠注解和它的定义方式,它们可以被Java编译器注解处理器和运行时代码使用反射和其他的虚拟机内省技术使用。
让我们来看一个最简单的注解@interface,@interface关键字引入了新的注解类型,这也是为何注解可以被当做专门的接口看待,注解可以声明有默认值和没有默认值的属性.如果注解声明了没有默认值的属性,那么在该注解被应用的所用地方都应该提供注解属性值。为了方便,如果注解只有一个属性并且属性的名称是value,那么属性的名称就可以被省略。
2、注解及其保留策略(Retention Policy)
每个注解都有一个被称为保留策略(Retention Policy)的特征,它是一组如何保留注解的策略组合的枚举(RetentionPolicy类型)。保留策略可以设置为CLASS、RUNTIME、SOURCE。
3、注解以及元素类型(ElementType)
注解的另外一个特征就是每个注解必须有它能够应用的元素类型。有点类似于保留策略,元素类型被定义成一组可能的元素类型的枚举(ElementType)。
4、注解与继承(Annotations and inheritance)
在Java中,声明注解与继承之间存在非常重要的联系。默认情况下,子类不能够继承父类中声明的注解,但是,有一种方法就是可以通过使用@Inherited注解在类层次结构中传递指定的注解。
5、注解处理器(Annotation processors)
Java编译器支持一种称为注解处理器的特殊类型的插件(使用-processor命令行参数),它可以在编译阶段处理注解。 注解处理器可以分析注解的作用(执行静态代码分析),创建额外的Java源文件或资源(可以被编译和处理),或者改变注解的代码。
在告知编译器那个注解可以被注解处理器应用和处理,保留策略(Retention Policy)扮演了非常关键的角色。
注释处理器被广泛使用,但是编写一个注解处理器需要一些关于Java编译器如何工作和编译过程本身的知识。
6、注解自身局限性
注解也有一些限制,在某些情况下使用注解可能会不太方便。
首先,注解不能继承其他的注解。
其次,不能通过编码的形式使用new关键字创建注解实例。
第三,注解只能声明基本数据类型属性,String或者 Class<?>类型及其数组。
第四,注解中不允许声明方法和构造器。
三、Named、RequstScoped、Model注解
请求(@RequestScoped):
在Web应用程序中的单个HTTP请求期间,请求范围仍然存在。应用程序由单个请求和响应组成,bean使用请求范围。
@Named:
该注解可以用来处理单接口与多个实现类的注入。@Named注解作用于成员变量或者方法参数,可以通过此标注的参数来区分不同的实现类。
@model:
@Model注解称为构造型,是用于封装其他注释的注释的术语。
Annotations的更多相关文章
- How those spring enable annotations work--转
原文地址:http://blog.fawnanddoug.com/2012/08/how-those-spring-enable-annotations-work.html Spring's Java ...
- Android注解使用之使用Support Annotations注解优化代码
前言: 前面学习总结了Java注解的使用,博客地址详见Java学习之注解Annotation实现原理,从本质上了解到什么注解,以及注解怎么使用?不要看见使用注解就想到反射会影响性能之类,今天我们就来学 ...
- Scala Macros - scalamela 1.x,inline-meta annotations
在上期讨论中我们介绍了Scala Macros,它可以说是工具库编程人员不可或缺的编程手段,可以实现编译器在编译源代码时对源代码进行的修改.扩展和替换,如此可以对用户屏蔽工具库复杂的内部细节,使他们可 ...
- [Android]使用自定义JUnit Rules、annotations和Resources进行单元测试(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5795091.html 使用自定义JUnit Rules.ann ...
- EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射
I.EF里的默认映射 上篇文章演示的通过定义实体类就可以自动生成数据库,并且EF自动设置了数据库的主键.外键以及表名和字段的类型等,这就是EF里的默认映射.具体分为: 数据库映射:Code First ...
- Multiple annotations found at this line
Multiple annotations found at this line 在使用MyEclipse的时候,通过MVN导入项目时候,webapp下面的JSP页面报了如下的错误: 这种情况通常的原因 ...
- How do annotations work internally--转
原文地址:http://stackoverflow.com/questions/18189980/how-do-annotations-work-internally The first main d ...
- How Do Annotations Work in Java?--转
原文地址:https://dzone.com/articles/how-annotations-work-java Annotations have been a very important par ...
- 使用Android Annotations开发
使用Android Annotations框架gradle配置1.修改Module下的build.gradle apply plugin: 'com.android.application' appl ...
- Entity Framework Code First (三)Data Annotations
Entity Framework Code First 利用一种被称为约定(Conventions)优于配置(Configuration)的编程模式允许你使用自己的 domain classes 来表 ...
随机推荐
- 苹果审核被拒,解析奔溃日志.txt转crash文件
1. 桌面新建一个文件夹,用来存放crash相关的东西.取名crash 2.下载苹果官方邮件里给的后缀名为 .txt 的被拒附件(这三个txt格式文件为苹果返回的崩溃日志文件),把这三个文件放在刚新建 ...
- 阻塞队列(BlockingQueue)
阻塞队列是 java.util.concurrent 包提供的一个类,该类提供了多线程中通过队列实现安全高效的数据处理的功能. 所谓阻塞队列,是在普通队列基础上实现了阻塞线程的功能: 队列为空时,获取 ...
- 关于容器类型数据的强转一共:str() list() set() tuple() dict() 都可以转换成对应的数据类型 /Number 数据类型的强转一共: int() bool() flaot() complex() 都可以转换成对应的数据类型
# ###强制转换成字典类型 # 多级容器数据:该类型是容器数据,并且里面的元素还是容器类型数据 # ###二级容器 # 二级列表 listvar = [1,3,4,5,[6,7,8,9]] res ...
- Axure RP 8过期,用户名和序列号(注册码)
用户名:axureuser 序列号:8wFfIX7a8hHq6yAy6T8zCz5R0NBKeVxo9IKu+kgKh79FL6IyPD6lK7G6+tqEV4LG 用户名:aaa注册码:2GQrt5 ...
- windows程序设计 MessageBox消息框
MessageBox函数 int WINAPI MessageBoxW( HWND hWnd,//窗口句柄 LPCWSTR lpText,//消息框主体显示的字符串 LPCWSTR lpCaption ...
- linux下git服务器安装
git服务器配置http://www.cnblogs.com/dee0912/p/5815267.html git教程https://www.liaoxuefeng.com/wiki/00137395 ...
- Django框架详细介绍---模型---ORM
一.概述 ORM(Object Relational Mapping),全称:对象关系映射,简单的说就是通过创建类.实例化出对象的方法,使得类.对象.对象的属性能够和数据库中的表.记录.字段意义对应. ...
- Network In Network学习笔记
Network In Network学习笔记 原文地址:http://blog.csdn.net/hjimce/article/details/50458190 作者:hjimce 一.相关理论 本篇 ...
- select报错
query = query.Where(c => c.MfcKey==temp); int hhho = query.Count(); query = from q in query join ...
- guest project <web接口开发与自动化测试>
一次写接口,简单记录一下... 参照虫师大大的书写的,有做小的修改... github上guest项目地址:git@github.com:lixiaofeng1993/guest.git web ap ...