JDK1.5新特性之注解
时间:2017-1-2 20:14
——注解的概述
注释是给人看的,而注解是给程序(框架)看的。
在Servlet3.0中可以使用注解来替代配置文件,开发者就不用再写配置文件了,而是写注解,然后Tomcat来读取注解。
注解也是类,需要定义了才能使用。
在Servlet3.0中又一个注解类是@WebServlet,然后我们就可以在Servlet中使用@WebServlet这个注解了,这个朱姐就是用来替代<servlet>,然后Tomcat会通过反射来读取注解中的信息。
* @Deprecated:作用在方法上,标记该方法为作废方法(已过时)。
* @SuppressWarnings:作用在方法上,压制警告。
定义注解类不能使用class、enum和interface,而是使用@interface
> public @interface MyAnn{ }
——使用注解目标
所有注解都是Annotation的子类。
注解可以作用在:类(接口或枚举)、属性、方法、构造器、包、参数、局部变量
* 定义注解类:框架的工作
* 使用注解:我们的工作
* 读取注解(反射):框架的工作
* 定义属性
> 格式:类型 属性名()
* 使用注解时给属性赋值
> @MyAnno(name="zhangsan", age=20)
* 注解属性的默认值
> int age() default 100;
> 在使用注解时,可以不给带有默认值的属性赋值。
* 名为value的属性的特权
> 在使用注解时,如果只给名为value的属性赋值,那么可以不给出属性的名称而直接赋值,当存在其他属性时,必须加上“value=”。
> @MyAnno("zhangsan"):表示给value="zhangsan"赋值。
* 注解属性的类型
> 8种基本类型
> String类型
> 枚举类型
> Class类型
> 注解类型
> 以上类型的一维数组类型
> 定义:
@MyAnno1{
int a();
String b();
MyEnum c();
Class d();
MyAnno2 e();
String f();
}
> 使用:
@MyAnno1(
a=100,
b="zhangsan",
c=MyEnum.option,
d=String.class,
e=@MyAnno2(age=20,name="zhangsan"),
f={"123", "456"}
)
——注解的作用目标限定以及保存策略限定
1、目标限定
让一个注解的作用目标只能在类上,而不能在方法上,这就叫作用目标的限定。
在定义注解时,给注解添加注解,这个注解时@Target
Target注解有一个属性:ElementType[] value(),这个属性是一个枚举类型。
使用方法:
@Target(value={ElementType.TYPE, ElementType.METHOD, ElementType/FIELD})
@interface MyAnno{ }
2、保留策略
* 源代码文件(SOURCE)
> 注解只在源代码中存在,当编译时就被忽略了(不能被反射)
* 字节码文件(CLASS)
> 注解在源代码中存在,编译时会把注解信息放到class文件中,但JVM在加载类时,会忽略注解。
* JVM中(RUNTIME)
> 注解在源代码、字节码文件中存在,并且在JVM加载类时,会把注解加载到JVM内存中(它是唯一可以反射的注解)
限定注解的保留策略:
使用RetentionPolicy注解:
@Retention(RetentionPolicy.RUNTIME)
——读取注解(反射)
1、要求:
注解的保留策略必须是RUNTIME
2、反射注解需要从作用目标上反射
* 类上的注解,需要使用Class来获取
* 方法上的注解,需要用Method来返回
* 构造器上的注解,需要用Constructor来获取
Class类方法概要:
<T extends Annotation> getAnnotation(Class<A> annotationClass)
如果存在该元素的指定类型的注解,则返回这些注解,否则返回null。
Annotation[] getAnnotations()
返回此元素上存在的所有注解。
Method、Field、Constructor:
这三个类都是AccessibleObject的子类。
AccessibleObject类方法概要:
<T extends Annotation> getAnnotation(Class<T> annotationClass)
如果存在该元素的指定类型的注解,则返回这些注解,否则返回null。
Annotation[] getAnnotations()
返回此元素上存在的所有注解。
Annotation[] getDeclaredAnnotations()
返回直接存在于此元素上的所有注解。
public Type getGenericSuperclass()
返回表示此Class所表示的实体(类、接口、基本类型或void)的直接父类的Type。
获取传递给父类的泛型信息。
返回的类型是Type接口的子接口:ParameterizedType(参数化类型) == A<String>
1、子类:得到当前类的Class对象:this.getClass()
2、Class:得到当前类父类的参数化类型(A<String, Integer...>):Type getGenericSuperclass(),因为返回值是ParameterizedType,所以需要强制类型转换。
3、ParameterizedType:得到所有的类型参数<String, Integer...>:Type[] getActualTypeArguments()
System.out.println(c3);
}
——反射泛型和反射注解的应用案例
User类:
}
Table注解:
----------------------------------------------------------------------------------------------------------------------------
ID注解:
----------------------------------------------------------------------------------------------------------------------------
Column注解:
BaseDAO:
-------------------------
-------------------------
// 可以将表名作为注解配置到类上,然后通过反射注解来获取配置的表名信息
-------------------------
}
JDK1.5新特性之注解的更多相关文章
- JDK1.7新特性(2):异常和可变长参数处理
异常 jdk1.7对try--catch--finally的异常处理模式进行了增强,下面我们依次来看增强的方面. 1. 为了防止异常覆盖,给Throwable类增加了addSuppressed方法,可 ...
- JDK1.8新特性(一) ----Lambda表达式、Stream API、函数式接口、方法引用
jdk1.8新特性知识点: Lambda表达式 Stream API 函数式接口 方法引用和构造器调用 接口中的默认方法和静态方法 新时间日期API default Lambda表达式 L ...
- JDK1.8新特性之(三)--函数式接口
在上一篇文章中我们介绍了JDK1.8的新特性有以下几项. 1.Lambda表达式 2.方法引用 3.函数式接口 4.默认方法 5.Stream 6.Optional类 7.Nashorm javasc ...
- JDK1.7新特性
jdk1.7新特性 1 对集合类的语言支持: 2 自动资源管理: 3 改进的通用实例创建类型推断: 4 数字字面量下划线支持: 5 switch中使用string: 6 二进制字面量: 7 简化可变参 ...
- jdk1.6新特性
1.Web服务元数据 Java 里的Web服务元数据跟微软的方案基本没有语义上的区别,自从JDK5添加了元数据功能(Annotation)之后,SUN几乎重构了整个J2EE体 系, 由于变化很大,干脆 ...
- Python3新特性 类型注解 以及 点点点
Python3新特性 类型注解 以及 点点点 ... Python3 的新特性 Python 是一种动态语言,变量以及函数的参数是 不区分类型 的 在 函数中使用类型注解 相当于 给 形参的 类型 设 ...
- JDK1.8 新特性
jdk1.8新特性知识点: Lambda表达式 函数式接口 *方法引用和构造器调用 Stream API 接口中的默认方法和静态方法 新时间日期API https://blog.csdn.net/qq ...
- JDK1.6新特性,WebService强化
Web service是一个平台独立的,松耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. Web ...
- JDK1.5新特性,基础类库篇,集合框架(Collections)
集合框架在JDK1.5中增强特性如下: 一. 新语言特性的增强 泛型(Generics)- 增加了集合框架在编译时段的元素类型检查,节省了遍历元素时类型转换代码量. For-Loop循环(Enhanc ...
随机推荐
- 【16位RAW图像处理三】直方图均衡化及局部直方图均衡用于16位图像的细节增强。
通常我们生活中遇到的图像,无论是jpg.还是png或者bmp格式,一般都是8位的(每个通道的像素值范围是0-255),但是随着一些硬件的发展,在很多行业比如医疗.红外.航拍等一些场景下,拥有更宽的量化 ...
- 笛卡尔树-P2659 美丽的序列
P2659 美丽的序列 tag 笛卡尔树 题意 找出一个序列的所有子段中子段长度乘段内元素最小值的最大值. 思路 我们需要找出所有子段中贡献最大的,并且一个子段的贡献为其长度乘区间最小值. 这--不就 ...
- 扩展欧几里得(exgcd)-求解不定方程/求逆元
贝祖定理:即如果a.b是整数,那么一定存在整数x.y使得ax+by=gcd(a,b).换句话说,如果ax+by=m有解,那么m一定是gcd(a,b)的若干倍.(可以来判断一个这样的式子有没有解)有一个 ...
- java跨平台性说明
一.举例说明 我们知道,只要是用标准C开发的程序,使用不同的编译器编译后的可执行文件是可以在对应平台运行的,比如windows可以使用VC编译,那编译后的exe文件就可以在windows下运行:liu ...
- K8S系列第四篇(Dockerfile)
DokcerFile 镜像定制 更多精彩内容请关注微信公众号:新猿技术生态圈 定制docker镜像的方式有两种: 手动修改容器内容,导出新的镜像. 基于dockerfile自行编写指令,基于指令流程创 ...
- odoo里面的read_group写法
#计算数task_count = fields.Integer(compute='_compute_task_count', string="Task Count")def _co ...
- CSS 格式 设置标签间距 和 input slot
作者:张艳涛 日期:2020-07-29 CSS设置俩个标签的间距 及 Input Slots <div> <div class="m-b-20 ovf-hd"& ...
- 字符串匹配算法(三)-KMP算法
今天我们来聊一下字符串匹配算法里最著名的算法-KMP算法,KMP算法的全称是 Knuth Morris Pratt 算法,是根据三位作者(D.E.Knuth,J.H.Morris 和 V.R.Prat ...
- 大数据学习(14)—— HBase进阶
HBase读写流程 在网上找了一张图,这个画的比较简单,就拿这个图来说吧. 写流程 1.当Client发起一个Put请求时,首先访问Zookeeper获取hbase:meta表. 2.从hbase:m ...
- Jquery遍历复选框选中项
var ret=''; $('name=chkIds').each(function(){ if($(this).is(':checked')){ ret+=$(this).val()+','; } ...