[Java] 反射
标签:持久化 重要 方法 ima 参考 spring rda 修改 注入
背景
- Java中最为重要的特性
- 运行时,通过对象获得此对象所在类的信息,查看或修改类的接口、方法、成员变量的属性等
- 几乎所有开发框架及应用技术中都是基于反射
获取类对象
- 类对象:描述这种类有什么属性和方法
- 一个类只会有一个类对象存在
- 获取方式
- Class.forName
- Hero.class
- new Hero().getClass()
- 获取类对象时,会导致类的属性被初始化
创建对象
- 先拿到Hero的类对象
- 通过类对象获取构造器对象
- 再通过构造器对象创建一个对象
访问属性
- Class>.getFields():只能获取public,包括从父类继承来的字段
- Class>.getDeclaredFields():可获取本类所有的字段,包括private,但不能获取继承来的字段
调用方法
- Class>.getMethods():获取类的全部方法
- Class>.getConstructors():获取类的全部构造方法
- Method.getParameterCount():获取方法参数数量
- Method.invoke():调用方法
应用
- Spring依赖注入、反转控制
- 使用时,在文本文件里写好类名,方法名
- 当同样位置用到的类和方法改变时,就不用改源代码了,直接改文本文件即可
实例
- 需求
- 用户下单,订单创建后保存到MongoDB
- pojoDocument-->Dao
- 传统方式代码存在的问题
- 每个pojo都需要一个将它转换为Document的方法(如order2Doc、product2Doc),如果pojo增加字段,相应方法也要修改
- 每个pojo都需要一个对应的Dao,不同pojo对应的Dao很类似(增删改查,orderDao、productDao),存在大量重复代码
- 优化
- 反射实现pojo和Document转换(各字段put到Document)
- 泛型实现代码复用(不同pojo不用再写不同Dao)
分析
参考
invoke()
https://zhidao.baidu.com/question/394854109.html
[Java] 反射
标签:持久化 重要 方法 ima 参考 spring rda 修改 注入
原文地址:https://www.cnblogs.com/cxc1357/p/12462412.html
文章来自:
搜素材网的
编程语言模块,转载请注明文章出处。
文章标题:
[Java] 反射
文章链接:http://soscw.com/index.php/essay/72416.html
评论