传智播客java学习--自定义注解

今天我复习了反射和内省知识:

 

反射:Filed,

1.         需求:对于给定的对象的属性进行赋值,

2.         使用方法:已知类的全类名,获取对应的class对象,获取要获取的Filed。

1.         获取私有的Filed:getDeclsredFiled(“class”)

2.         给私有的Field赋值,现需要让其可见setAccessible(true)

3.         再对字段赋值

 

Method: 

1.         获取对应的calss对象

2.         利用class对象的newInstance()方法创建

3.         获取setName(String)对象对应的method对象

4.         调用method对象的invoke()方法进行执行2创建的User对象的setName方法

5.         测试打印

 

内省:

1.         什么是内省:内省是 Java 语言对 Bean 类属性的一种缺省处理方法。

2.         一般的做法是:一般的做法是通过类 Introspector 来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法

 

 

      

        org.apache.commons.beanutils

                      背景:一个JavaBean通常包含了大量的属性,很多情况下,对JavaBean的处理导致大量get/set代码堆积,增加了代码长度和阅读代码的难度

                      解决:BeanUtils提供对 Java反射和内省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。

              

               Beanutils 用法:

                             BeanUtils.copyProperties(): 属性复制

ConvertUtils.regsiter(Converter convert, Class clazz) 注册转换器

 

Annotation(注释) 概述

使用 Annotation 时要在其前面增加 @ 符号, 并把该 Annotation 当成一个修饰符使用. 用于修饰它支持的程序元素

三个基本的 Annotation:

•         @Override: 限定重写父类方法, 该注释只能用于方法

•         @Deprecated: 用于表示某个程序元素(类, 方法等)已过时

•         @SuppressWarnings: 抑制编译器警告.

 

自定义 Annotation

定义新的 Annotation 类型使用 @interface 关键字

Annotation 的成员变量在 Annotation 定义中以无参数方法的形式来声明. 其方法名和返回值定义了该成员的名字和类型.

可以在定义 Annotation 的成员变量时为其指定初始值, 指定成员变量的初始值可使用 default 关键字

没有成员定义的 Annotation 称为标记; 包含成员变量的 Annotation 称为元数据 Annotation

 

 

              今天讲的知识感觉难度有点大,我要反复看几遍。

明天继续学习。

展开阅读全文

没有更多推荐了,返回首页