Annotation(注解)
Annotation是从jdk5.0的作用:
注解可以本身,可以被其他程序(编译器)读取,注解信息解释程序 不是程序处理流程
注解可以用在包、类、方法、变量前面用于其解释的作用
public @interface override{}自定义注解
1.内置注解
@Override 重写父类的方法
@Deprecated 报一个警告,不建议使用;deprecation 使用过时的类或方法的警告
@SuppressWarnings 用于抑制编译时警告
@SuppressWarnings("all")不予理睬警告;SuppressWarnings需要加参数才能使用;all 所有警告
unckecked 执行检查的转换时的警告,如使用集合时未指定泛型
@suppressWarnings(value={"unchecked","deprecation"})
@target(...)用于表明一个注解的使用范围
标记注解:没有内容
@SafeVarargs 堆污染警告:当把一个不带泛型的引用赋值给带泛型的引用变量时会出现堆污染的警告;在使用带泛型的形参可变方法时,由于没有泛型数组,所以必然会引发堆污染警告;堆污染在jdk1.6之前没有问题,在定义时不会引发警告,但是在调用过程中会引发警告
@FunctionalInterface 函数式接口
如果接口只有一个抽象方法(可以包含多个默认方法或者多个static 方法)是用来Lambda使用的只能修饰接口,不能修饰其他程序元素元Annotation
2.自定义注解:
新建Annotation
public @interface xxx{}
元注解:对注解的表述
@Target 用于描述注解的使用范围
@target (value = ElementType.Package type field method)
@traget 本身定义:参数名 +参数类型
ElementType[] value(); ElementType 枚举类型
@T (value={ElementType.method,ElementType.type})
@Retention 保留策略 :用于描述注解的声明周期
取值:
Source 在源文件中有效(即源文件保留)
Class 即class保留
Runtime 运行是有效 可以被其他类引用,通过反射读取 一般自定义注解使用runtime,且在source和class中都有效;通常与编译器和加载器有关
@Testable 用于标记哪些方法是可测试的,该Annotation 可以作为Junti测试的框架的补充。在junit框架中它要求测试用例的测试方法必须以test 开头,因此如果使用@Testable注解,则可以把任何方法标记为可测试的;使用注解来标记程序,对程序不会产生任何影响
if(m.isAnnotationPresent(Testable.class))
@Repeatable(重复注解)
java8之前同一程序元素前面最多只能使用一个相同类型的Annotation,如果需要多个则需要多个需要Annotation容器即@result({@result(),@result()})重复注解 只是一种简化写法,这种简化写法只是一种写法;多个重复注解其实会被当作容器注解value成员变量的数组元素
注意:
注解只有被解析才有用,通过反射来使用
如果自定义 内容只有一个参数 一般命名为value
赋值 @xx (value="aa")或者@xx ("aa")
3.使用注解完成映射案例
难点是后期的反射解析,如果只是自定义注解和注解的赋值 不怎么难 ---》注解信息流程(难点)
ORM object relation mapping 对象关系映射 使用注解完成类和表结构的映射关系
标注javabean 上为注解赋值 与那个表相对应
@sxttalbe("tb_sturngd")
根据注解生成表,再建一个注解存储字段
四个部分:
1.定义类的注解
2.定义字段的注解
3.javabean 中对类的注解赋值-与那个表对应
,字段的名称 、类型、长度的赋值
4.对解析程序 将 注解和表相互转化--》一般框架做的就是解析程序 ,对我们透明 只要关注前三点就好
本质就是反射程序
class clas = class.forname(javabean的全路径)
clas 将包含javabean 的全部信息包括注解
通过 class.getAnnotations()得到全部注解 类上面的类的指定注解
sxtTable st =(sxtTable)clas.getAnnotations(sxttabl.class)
类似键值对
获得类的属性的注解
Filed f clas.getDeclaredField("字段名称");-》通过字段名获得字段全部信息,用来获得字段中注解的信息